後序遍歷DFS3 平衡二叉樹(樹的深度)

2021-10-11 17:42:35 字數 1173 閱讀 2108

遞迴思路,如果把樹分成三部分,求樹的左樹深度,求右樹深度,則深度就為更大的乙個加1.使用後序遍歷,得到左和右的深度之後就可以了。

public class solution

int ld=

treedepth

(root.left)

; int rd=

treedepth

(root.right);if

(ld>rd)

return ld+1;

else

return rd+1;

}}

與最大深度的不同主要是

當 root 節點左右孩子都為空時,返回 1

當 root 節點左右孩子有乙個為空時,返回不為空的孩子節點的深度

當 root 節點左右孩子都不為空時,返回左右孩子較小深度的節點值

class solution 

}

平衡二叉樹也就是左子樹和右子樹的深度相差不超過1,利用上面求深度的方法可以很簡單的求出左右子樹的深度。然後即可求出這個節點是否是平衡的,然後再遞迴判斷它的左右節點是否是平衡的,判斷每個節點即可完成。(自上而下)

但這樣經過了太多的遍歷,所以稍微改一下,在第一遍上來的時候就在過程中順便判斷這個節點是不是平衡的,如果不平衡後面的就不用遍歷了,完成剪枝,大大減少了遍歷的次數。

public class solution

return

core

(root)==-

1?false

:true;}

public int core

(treenode root)

int left=

core

(root.left);if

(left==-1

)return-1

; int right=

core

(root.right);if

(right==-1

)return-1

;if(math.

abs(left-right)

>1)

return-1

;return

1+math.

max(left,right);}

}

二叉樹的後序遍歷

1 問題描述 給出一棵二叉樹,返回其節點值的後序遍歷。給出一棵二叉樹 1 2 3返回 3,2,1 2 問題實現 與前序遍歷 中序遍歷類似。若二叉樹為空,則空操作返回。否則後序遍歷根節點的左子樹,後序遍歷根節點的右子樹,訪問根節點。3 definition of treenode class tree...

二叉樹的後序遍歷

節點和樹類 public class treenode public treenode integer val override public string tostring public class tree 遞迴實現 public arraylistafter treenode node aft...

二叉樹的後序遍歷

如下圖表示一顆二叉樹,對它進行先序遍歷操作,採用兩種方法,遞迴和非遞迴操作。遍歷結果為 4526731。1 遞迴操作 思想 若二叉樹為空,返回。否則 1 後序遍歷右子樹 2 後序遍歷左子樹 3 遍歷根節點 void postorder bitree root 2 非遞迴操作 void postord...