LeetCode—222. 完全二叉树的节点个数
生活随笔
收集整理的這篇文章主要介紹了
LeetCode—222. 完全二叉树的节点个数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
222. 完全二叉樹的節點個數
題目描述:
給你一棵 完全二叉樹的根節點 root ,求出該樹的節點個數。
完全二叉樹的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其余每層節點數都達到最大值,并且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1~ 2h 個節點。
如果存在則返回 true,不存在返回 false。
考察重點:完全二叉樹定義
方法概括:遞歸遍歷左右子樹的深度,左右子樹深度一致,說明以當前節點為根的左子樹一定是完全二叉樹;左右子樹深度不一致,說明以當前節點為根的右子樹一定是完全二叉樹
func getDepth(root *d.TreeNode) int { //計算當前結點的最大深度。由于是完全二叉樹,所以最大深度等于最大左子樹深度res := 0for root != nil {res++root = root.Left}return res }func CountNodes(root *d.TreeNode) int {if root == nil {return 0}if root.Left == nil && root.Right == nil {return 1}left := getDepth(root.Left) //得到左右子樹深度right := getDepth(root.Right)/**左右子樹深度一致,說明以root=1為根的左子樹一定是完全二叉樹,右子樹不一定。所以總結點數=完全二叉左子樹 + 根節點 + (右子樹)1 12 3 2 32 2 3 2 2 3 3左右子樹深度不一致,說明以root=1為根的右子樹一定是完全二叉樹,左子樹一定不是。所以總結點數=完全二叉右子樹 + 根節點 + (左子樹)12 32 2 3 32 2*/if left == right { //如果深度一致,向右子樹繼續遍歷,同時加上完全二叉的左子樹與根節點return CountNodes(root.Right) + (1<<left - 1) + 1} else { //如果深度不一致,向左子樹繼續遍歷,同時加上完全二叉的右子樹與根節點return CountNodes(root.Left) + (1<<right - 1) + 1} }總結
以上是生活随笔為你收集整理的LeetCode—222. 完全二叉树的节点个数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wireshark过滤使用
- 下一篇: PRD之道:活用Axure绘制高质量的业