2021-10-09 求二叉树的高度(递归和迭代版本)
生活随笔
收集整理的這篇文章主要介紹了
2021-10-09 求二叉树的高度(递归和迭代版本)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
劍指 Offer 55 - I. 二叉樹的深度
輸入一棵二叉樹的根節(jié)點,求該樹的深度。從根節(jié)點到葉節(jié)點依次經(jīng)過的節(jié)點(含根、葉節(jié)點)形成樹的一條路徑,最長路徑的長度為樹的深度。
和題解寫的一比,我寫的像坨shit
//! 求二叉樹的高度,遞歸版本 //! 遞歸的精髓就在于,把大問題分解為解答過程相同的小問題 //! 既然我們要求根節(jié)點的高度,根節(jié)點的高度又等于其子節(jié)點的最大高度加一 //! 那么問題就轉(zhuǎn)化為了求每個節(jié)點及其子節(jié)點的高度,而最小問題就是葉節(jié)點的子節(jié)點為空,高度為0 int BinarySearchTreesZH::height(Node *node) {int nodeHeight = 0;int leftSonHeight = 0; //代表左子節(jié)點高度int rightSonHeight = 0; //代表右子節(jié)點高度if (node == nullptr){ //如果到了空結(jié)點,則其高度為0nodeHeight = 0;return nodeHeight;}leftSonHeight = height(node->left);rightSonHeight = height(node->right);if (leftSonHeight >= rightSonHeight) //當(dāng)前結(jié)點的高度等于其左右子節(jié)點最大高度+1{nodeHeight = leftSonHeight + 1;}else{nodeHeight = rightSonHeight + 1;}return nodeHeight; }//! 求二叉樹的高度,迭代版本 //! 所謂二叉樹的高度就是二叉樹有多少層,所以在層序遍歷里加一個層數(shù)計數(shù)就可以了 //! 但這個層數(shù)計數(shù)反倒是難想,其實在層序遍歷的隊列中,上一層全部出隊后,下一層有多少元素,就是隊列的size() int BinarySearchTreesZH::heightNoRecursion(Node *node) {queue<Node *> list; //創(chuàng)建結(jié)構(gòu)體指針隊列,數(shù)據(jù)類型Node*,但是層序遍歷不用指針也可以if (node == nullptr){return 0;}else{list.push(node); //把根節(jié)點push進(jìn)去}int height = 0;int nextCengNum = 1; //! 第一層元素數(shù)為1int j = 0; //! 循環(huán)計數(shù)器,每一層循環(huán)nextCengNum次就會清零,并高度+1while (list.size() != 0) //只要隊列不為空就一直出隊進(jìn)隊{//這里就是把隊首的元素的左右子節(jié)點進(jìn)隊,然后彈出隊首元素,就可以把二叉樹中所有節(jié)點一層一層的按次序進(jìn)隊和出隊//還是畫圖比較好理解if (list.front()->left != nullptr){list.push(list.front()->left);}if (list.front()->right != nullptr){list.push(list.front()->right);}list.pop();j++; //這里開始就是計算遍歷的層數(shù)的,遍歷次數(shù)每到達(dá)下一層元素數(shù)時就代表一層if (j == nextCengNum){height++;nextCengNum = list.size();j = 0;}}return height; }總結(jié)
以上是生活随笔為你收集整理的2021-10-09 求二叉树的高度(递归和迭代版本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021 - 10 -7 ! 二叉树的前
- 下一篇: 2021- 10 -9 LeetCode