1. 二叉樹的寬度
若某一層的節點數不少於其他層次的節點數,那麼該節點數即為二叉樹的寬度。在訪問過程中,我們只需要將同一層中的節點同時入棧即可。為此,我們也只需要知道上一層佇列中元素的多少,在將該queue中所有元素出佇列的同時,將下一層的元素進佇列,完成交接。這樣,便可以清晰地知道每一層中節點的多少,自然也知曉樹的寬度。
1int treewidth(bitree *root)
5int width = 0;
6int maxwidth = 0;
7 queueq;
8 bitree *p =nullptr;
9q.push(root);
10while(!q.empty())
15for(int i=0; i)
21if(p->right)24}
25}26return
maxwidth;
27 }
2. 樹的高度
在上述演算法中,知道了每一層中節點的個數,其實也很容易知道樹的高度,簡直就是順便的事。由此,可以給出相應的非遞迴演算法。
1int treeheight2(bitree *root)
5int height = 0;
6int width = 0;
7 queueq;
8 bitree *p =nullptr;
9q.push(root);
10while(!q.empty())
19if(p->right)22}
23}24return
height;
25 }
當然,對於樹的高度,還有一種**簡潔的遞迴演算法,也一併呈上。
1int treeheight1(bitree *root)
5int leftheight = treeheight1(root->left);
6int rightheight = treeheight1(root->right);
7return leftheight>rightheight ? leftheight+1 :rightheight+1;
8 }
遞迴思想其實很簡單,**也清晰易懂,即左右子樹的較高者加上1(root高度為1)即可。樹的高度等價於從根節點到葉子節點的最長路徑的長度,後續博主也會討論到其他變體,例如求解從根節點到葉子節點的最短路徑長度。
二叉樹的寬度和深度
遞迴版本 public static intgetdeep treenode root 非遞迴版本 思想 二叉樹的深度就是指二叉樹有幾層,那麼我們可以使用層序遍歷來實現。public static intgetdeep treenode root if p.right null 如果下一層沒有結點,...
二叉樹的深度 二叉樹的深度 二叉樹最大寬度
題目 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 返回它的最大深度 3 根節點加上左右子樹的最大深度就是樹的最大深度。如下 class solution ...
求二叉樹的深度和寬度
求二叉樹的深度和寬度.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std struct btnode 先序建立二叉樹 void creatbtree btnode root else 求二叉樹的深度 int g...