求解二叉樹所有節點的深度

2021-07-23 10:15:21 字數 1067 閱讀 7811

如何求解乙個二叉樹所有節點的深度?

常見的演算法是採用遞迴求解二叉樹的最大深度,演算法如下:

int maxdepth(node *p)   

但是要求解所有節點的深度值呢?上面的演算法就不再適用了。我們可以這樣思考,採用遞迴遍歷所有節點的時候,

遞迴函式的呼叫層數其實就是該節點的深度。

演算法如下:

void print_depth(node *p)

else

out:

depth--;

}

每當進入遞迴函式一次,depth就增加1,每退出函式一次,depth就減少1。由於遞迴函式中depth需要動態維護,因此這裡使用了static關鍵字。如有不清楚static關鍵字的同鞋可以參考我之前的博文。

兩種演算法的不同之處在於,後者使用了乙個變數記錄遞迴函式的呼叫層數。如果層數越高,節點深度越深。因此後者可以將所有節點的深度值求出。進而有利於求解最大深度、指定深度節點路徑等問題。因此我覺得相比單純求解最大深度演算法,後者的用途更多。

如計算下面的二叉樹的所有節點深度:

完整程式:

#include#includetypedef struct nodenode;

void create(node **p,node *parent)

(*p)->data=ch;

(*p)->parent=parent;

create(&(*p)->left,*p);

create(&(*p)->right,*p);

}}void print_depth(node *p)

else

out:

depth--;

}int main(void)

輸出為:

二叉樹的深度 二叉樹的深度

題目描述輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。及測試用例 單步除錯檢視過程 public class solution19 拿到左子樹的最大深度 int leftdep treedepth root.left 拿到右子...

二叉樹的深度 二叉樹的深度 二叉樹最大寬度

題目 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 返回它的最大深度 3 根節點加上左右子樹的最大深度就是樹的最大深度。如下 class solution ...

二叉樹之 二叉樹深度

二叉樹深度 獲取最大深度 public static int getmaxdepth treenode root 二叉樹寬度 使用佇列,層次遍歷二叉樹。在上一層遍歷完成後,下一層的所有節點已經放到佇列中,此時佇列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度 獲取最大...