二叉树的类
class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}
二叉树的插入:将插入的值与节点比较大小,
若比节点小,则跟左子树再比较,如果左子树为空,则插入。
若比节点大,则跟右子树比较,如果右子树为空,则插入。
function InsertNode($num,$root){
$p=$root;
if($num<$root->val){
if(is_null($root->left)){
$root->left=new TreeNode($num);
return ;
}
InsertNode($num,$root->left);
}else{
if(is_null($root->right)){
$root->right=new TreeNode($num);
return ;
}
InsertNode($num,$root->right);
}
}
二叉树的查找:
将查找的值与节点比较大小,
若比节点小,则跟左子树再比较,如果左节点比他小,则结束。
若比节点大,则跟右子树再比较,如果右子点比他大,则结束。
若相等,则结束。
二叉树的删除:三种情况
第一种,删除的是叶子节点,则直接删除。
第二种是,删除的节点只有一个子节点,那就把他的父节点指向他的指针,指向他的子节点。
第三种是,删除的节点有两个子节点,这个是最恶心的。将右节点放到删除节点的位置,判断他是不是还有两个子节点,如果还有两个,重复上述步骤。
多叉树其实和这个差不多,只不过多一个节点而已。举例:三叉树
class TreeNode{
var $val;
var $child1= NULL;
var $child2= NULL;
var $child3= NULL;
function __construct($val){
$this->val = $val;
}
}
实现的话其实是一样的,例如
新增$node1=new TreeNode(1);定义了一个值为1的节点,没有子节点
$node2=new TreeNode(1);
$node1->child1=$node2;给node1加节点