二叉樹的深度:
輸入一棵二叉樹,求該樹的深度。從根結(jié)點(diǎn)到葉結(jié)點(diǎn)依次經(jīng)過的結(jié)點(diǎn)(含根、葉結(jié)點(diǎn))形成樹的一條路徑,最長路徑的長度為樹的深度。
思路:
1.非遞歸層序遍歷
2.使用輔助隊(duì)列,根結(jié)點(diǎn)先入隊(duì)列
3. 循環(huán)判斷隊(duì)列是否為空,如果不為空就繼續(xù)循環(huán)隊(duì)列里面的每個(gè)結(jié)點(diǎn)
4. 循環(huán)隊(duì)列時(shí),當(dāng)前當(dāng)前結(jié)點(diǎn)出隊(duì)列,把該結(jié)點(diǎn)的左右孩子入隊(duì)列
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
<?phphtml' target='_blank'>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);//在數(shù)組最后添加元素 $depth=0; while(!empty($queue)){ $depth++; $size=count($queue); for($i=0;$i<$size;$i++){ $node=array_shift($queue);//非常重要 刪除第一個(gè)元素 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如何實(shí)現(xiàn)二叉樹的深度計(jì)算(附代碼)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注 其它相關(guān)文章!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選