菜单

[PHP] 数据结构-二叉树的创制PHP完成

2019年2月13日 - Java

1.用到递归的原理,只可是在原本打印结点的地方,改成了变通结点,给结点赋值的操作
if(ch==’#’){*T=NULL;}else{malloc();(*T)->data=ch;createFunc((*T)->lchild);createFunc((*T)->rchild);}

2.前序遍历:先走访根结点,前序遍历左子树,前序遍历右子树;中左右

3.将二叉树中各种结点的空指针引出一个虚结点,其值为特定值#,处理二叉树为原二叉树的扩展二叉树,伸张二叉树做到一个遍历系列确定一棵二叉树

class TreeNode {
       int value;
       TreeNode left_Node;
       TreeNode right_Node;
       // TreeNode构造函数
       public TreeNode(int value) {
          this.value=value;
          this.left_Node=null;
          this.right_Node=null;
       }
} 

图片 1

 

<?php
class BinTree{
        public $data;
        public $left;
        public $right;
}
//前序遍历生成二叉树
function createBinTree(){
        $handle=fopen("php://stdin","r");
        $e=trim(fgets($handle));
        if($e=="#"){
                $binTree=null;
        }else{
                $binTree=new BinTree();
                $binTree->data=$e;
                $binTree->left=createBinTree();
                $binTree->right=createBinTree();
        }   
        return $binTree;
}    

$tree=createBinTree();

var_dump($tree);

A
B
#
D
#
#
C
#
#
object(BinTree)#1 (3) {
  ["data"]=>
  string(1) "A"
  ["left"]=>
  object(BinTree)#2 (3) {
    ["data"]=>
    string(1) "B"
    ["left"]=>
    NULL
    ["right"]=>
    object(BinTree)#3 (3) {
      ["data"]=>
      string(1) "D"
      ["left"]=>
      NULL
      ["right"]=>
      NULL
    }
  }
  ["right"]=>
  object(BinTree)#4 (3) {
    ["data"]=>
    string(1) "C"
    ["left"]=>
    NULL
    ["right"]=>
    NULL
  }
}
class BinaryTree {
   public TreeNode rootNode; //二叉树的根节点
   //构造函数:利用传入一个数组的参数来建立二叉树
   public BinaryTree(int[] data) {
      for(int i=0;i<data.length;i++) 
         Add_Node_To_Tree(data[i]);
   }
   //将指定的值加入到二叉树中适当的节点
   void Add_Node_To_Tree(int value) {
      TreeNode currentNode=rootNode;
      if(rootNode==null) { //建立树根
         rootNode=new TreeNode(value);
         //一次添加一个节点进去
         return;
      }
    //建立二叉树
      while(true) {
         if (value<currentNode.value) { //在左子树
            if(currentNode.left_Node==null) {
              currentNode.left_Node=new TreeNode(value);
              return;
            }
            else currentNode=currentNode.left_Node;
         }
         else { //在右子树
            if(currentNode.right_Node==null) {
              currentNode.right_Node=new TreeNode(value);
              return;
            }
            else currentNode=currentNode.right_Node;
         }
       }
   }
}

  

  

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图