PHP排序二叉树基本功能实现方法示例
程序员文章站
2022-11-23 17:11:23
本文实例讲述了php排序二叉树基本功能实现方法。分享给大家供大家参考,具体如下:
这里演示了排序二叉树节点的插入,中序遍历,极值的查找和特定值的查找的功能.
基本没有提...
本文实例讲述了php排序二叉树基本功能实现方法。分享给大家供大家参考,具体如下:
这里演示了排序二叉树节点的插入,中序遍历,极值的查找和特定值的查找的功能.
基本没有提供什么概念和定义.建议先简单了解一下本文提供的几个概念在来看本文.
实际上,只是简单的提供了代码,注释也很少,各位辛苦了.
二叉树:在计算机科学中,二叉树是每个节点最多有两个子树的树结构。
排序二叉树: 左孩子节点的值小于父节点的值,右孩子节点的值大于父节点的值.
几个概念:
根节点
叶子节点
左子树
右子树
中序遍历
前序遍历
后序遍历
二叉树查找
中序遍历:
先遍历左子树,在遍历本节点,在遍历右节点.遍历之后的结果就是排序好之后的结果
// created by 曲朋维 // 排序二叉树 // 完成以下任务. // 1. 将节点插入到对应位置 // 2. 使用中序遍历遍历这个二叉树 // 3. 找到这个二叉树的极值 // 4. 搜索一个特定的值 class node{ public $key,$left,$right; public function __construct($key) { $this->key = $key; } } class binarytree{ public $root; public $sortarr = []; // 插入节点 public function insertnode($node,$newnode){ if ($node->key < $newnode->key){ // 如果父节点小于子节点,插到右边 if (empty($node->right)){ $node->right = $newnode; }else{ $this->insertnode($node->right,$newnode); } }elseif ($node->key > $newnode->key){ // 如果父节点大于子节点,插到左边 if (empty($node->left)){ $node->left = $newnode; }else{ $this->insertnode($node->left,$newnode); } } } public function insert($key){ $newnode = new node($key); if (empty($this->root)){ $this->root = $newnode; }else{ $this->insertnode($this->root,$newnode); } } // 中序遍历 public function midsort(){ $this->midsortnode($this->root); } public function midsortnode($node){ if (!empty($node)){ $this->midsortnode($node->left); array_push($this->sortarr,$node->key); $this->midsortnode($node->right); } } // 寻找极值 public function findmin(){ //不断的找它的左子树,直到这个左子树的节点为叶子节点. if (!empty($this->root)){ $this->findminnode($this->root); } } public function findminnode(node $node){ if (!empty($node->left)){ $this->findminnode($node->left); }else{ echo '这个二叉树的最小值为:'.$node->key; } } public function findmax(){ if (!empty($this->root)){ $this->findmaxnode($this->root); } } public function findmaxnode(node $node){ if (!empty($node->right)){ $this->findmaxnode($node->right); }else{ echo '这个二叉树的最大值为:'.$node->key; } } // 查找特定的值 public function find($val = ''){ if (!empty($val)){ $this->findnode($this->root,$val); } } public function findnode(node $node,$val){ if ($node->key == $val){ echo '找到'.$val.'了'; }else if ($node->key > $val){ // 如果 父节点的值 大于要查找的值,那么查找它的左子树 if (!empty($node->left)){ $this->findnode($node->left,$val); }else{ echo '没有这个东西!'; } }else if ($node->key < $val){ if (!empty($node->right)){ $this->findnode($node->right,$val); }else{ echo '没有这个东西!'; } } } } $tree = new binarytree(); // 节点插入 $nodes = array(8,3,10,1,6,14,4,7,13); foreach ($nodes as $value){ $tree->insert($value); } // 中序遍历 //$tree->midsort(); //print_r($tree->sortarr); // 寻找极值 //$tree->findmin(); //$tree->findmax(); // 查找特定的值 $tree->find(7); echo "<br/>"; $tree->find(11);
运行结果:
找到7了
没有这个东西!
更多关于php相关内容感兴趣的读者可查看本站专题:《php数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《php数组(array)操作技巧大全》、《php常用遍历算法与技巧总结》及《php数学运算技巧总结》
希望本文所述对大家php程序设计有所帮助。