二叉樹的寬度和深度

2022-08-30 23:30:29 字數 1220 閱讀 1760

1. 二叉樹的寬度

若某一層的節點數不少於其他層次的節點數,那麼該節點數即為二叉樹的寬度。在訪問過程中,我們只需要將同一層中的節點同時入棧即可。為此,我們也只需要知道上一層佇列中元素的多少,在將該queue中所有元素出佇列的同時,將下一層的元素進佇列,完成交接。這樣,便可以清晰地知道每一層中節點的多少,自然也知曉樹的寬度。

1

int 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. 樹的高度

在上述演算法中,知道了每一層中節點的個數,其實也很容易知道樹的高度,簡直就是順便的事。由此,可以給出相應的非遞迴演算法。

1

int 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 }

當然,對於樹的高度,還有一種**簡潔的遞迴演算法,也一併呈上。

1

int 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...