日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode—222. 完全二叉树的节点个数

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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. 完全二叉树的节点个数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。