1. 程式人生 > >[PHP]算法- 二叉樹的深度的PHP實現

[PHP]算法- 二叉樹的深度的PHP實現

添加元素 style 深度 turn while size 輸入 ray UNC

二叉樹的深度:
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。

思路:
1.非遞歸層序遍歷
2.使用輔助隊列,根結點先入隊列
3. 循環判斷隊列是否為空,如果不為空就繼續循環隊列裏面的每個結點
4. 循環隊列時,當前當前結點出隊列,把該結點的左右孩子入隊列

TreeDepth(tree)
    if !tree return 0
    array_push(queue,tree);
    depth=0
    while(!empty(queue)){
        ++depth
        for i=0;i<queue.size;i++
            node
=array_pop(queue) array_push(queue,node->left); array_push(queue,node->right); return depth
<?php
class TreeNode{
    var $val;
    var $left = NULL;
    var $right = NULL;
    function __construct($val){
        $this->val = $val;
    }   
}
function TreeDepth($tree
) { if(!$tree) return 0; $queue=array(); array_push($queue,$tree);//在數組最後添加元素 $depth=0; while(!empty($queue)){ $depth++; $size=count($queue); for($i=0;$i<$size;$i++){ $node=array_shift($queue
);//非常重要 刪除第一個元素 if($node->left){ array_push($queue,$node->left); } if($node->right){ array_push($queue,$node->right); } } } return $depth; } $node1=new TreeNode(1); $node2=new TreeNode(2); $node3=new TreeNode(3); $node4=new TreeNode(4); $node5=new TreeNode(5); $node6=new TreeNode(6); $node7=new TreeNode(7); $tree=$node1; $node1->left=$node2; $node1->right=$node3; $node2->left=$node4; $node2->right=$node5; $node4->right=$node6; $node3->left=$node7; var_dump($tree); $dep=TreeDepth($tree); var_dump($dep);

[PHP]算法- 二叉樹的深度的PHP實現