本文共 3708 字,大约阅读时间需要 12 分钟。
二叉树是数据存储的一种树形结构,具有父节点和两个子节点的特点。其核心特性是每个节点最多有两个子节点,通常称为左孩子和右孩子。以下是二叉树的核心操作说明:
二叉树的创建过程如下:
节点类定义:
class Node { public $data; // 结点数据 public $left; // 左孩子 public $right; // 右孩子 public function __construct($data, $left = null, $right = null) { $this->data = $data; $this->left = $left; $this->right = $right; }} 二叉树初始化:
class Btree { public $root; public function init() { $this->root = new Node(null); return $this->root; }} public function leftInsert($cur, $data) { if (!$cur) { return false; } $node = new Node($data, $cur->left); $cur->left = $node; return $node;}public function rightInsert($cur, $data) { if (!$cur) { return false; } $node = new Node($data, null, $cur->right); $cur->right = $node; return $node;} public function preView($root, &$res = []) { if (!$root) { return false; } $res[] = $root->data; $this->preView($root->left, $res); $this->preView($root->right, $res); return $res;} 2. **前序遍历(堆栈实现)**: ```php public function pre2($root) { if (!$root) { return false; } $stack = []; $res = []; $stack[] = $root; while ($stack) { $cur = array_pop($stack); $res[] = $cur->data; if ($cur->right) { $stack[] = $cur->right; } if ($cur->left) { $stack[] = $cur->left; } } return $res; } public function midView($root, &$res = []) { if (!$root) { return false; } $this->midView($root->left, $res); $res[] = $root->data; $this->midView($root->right, $res); return $res;} 4. **后序遍历**: ```php public function aftView($root, &$res = []) { if (!$root) { return false; } $this->aftView($root->left, $res); $this->aftView($root->right, $res); $res[] = $root->data; return $res; } public function floorView($root) { if (!$root) { return false; } $queue = []; $queue[] = $root; $res = []; while ($queue) { $cur = array_shift($queue); $res[] = $cur->data; if ($cur->left) { $queue[] = $cur->left; } if ($cur->right) { $queue[] = $cur->right; } } return $res;} ##### 核心查找与删除操作1. **查找操作**: ```php public function find($cur, $data) { if (!$cur) { return false; } if ($cur->data == $data) { return true; } if ($cur->left && $this->find($cur->left, $data)) { return true; } if ($cur->right && $this->find($cur->right, $data)) { return true; } return false; } public function del($cur) { if (!$cur) { return false; } if ($cur->left) { $this->del($cur->left); } if ($cur->right) { $this->del($cur->right); } unset($cur); return true;} 以下是基于上述二叉树操作创建一个简单树状结构:
$btree = new Btree();$root = $btree->init();$cur = $btree->leftInsert($root, 'A');$cur = $btree->leftInsert($cur, 'B');$cur = $btree->leftInsert($cur, 'D');$btree->rightInsert($cur, 'G');$cur = $btree->rightInsert($root->left, 'C');$btree->rightInsert($cur, 'F');$btree->leftInsert($cur, 'E');
ABDGCEFABDGCEFGDBAECFGDBEFCAABCDEFG---------------F----------C---------------E----A----------B--------------------G---------------D
$find = $btree->find($root->left, 'E');var_dump($find); // true
转载地址:http://ektfk.baihongyu.com/