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