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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2021-10-09 求二叉树的高度(递归和迭代版本)

發(fā)布時(shí)間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021-10-09 求二叉树的高度(递归和迭代版本) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

劍指 Offer 55 - I. 二叉樹的深度
輸入一棵二叉樹的根節(jié)點(diǎn),求該樹的深度。從根節(jié)點(diǎn)到葉節(jié)點(diǎn)依次經(jīng)過的節(jié)點(diǎn)(含根、葉節(jié)點(diǎn))形成樹的一條路徑,最長(zhǎng)路徑的長(zhǎng)度為樹的深度。

和題解寫的一比,我寫的像坨shit

//! 求二叉樹的高度,遞歸版本 //! 遞歸的精髓就在于,把大問題分解為解答過程相同的小問題 //! 既然我們要求根節(jié)點(diǎn)的高度,根節(jié)點(diǎn)的高度又等于其子節(jié)點(diǎn)的最大高度加一 //! 那么問題就轉(zhuǎn)化為了求每個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn)的高度,而最小問題就是葉節(jié)點(diǎn)的子節(jié)點(diǎn)為空,高度為0 int BinarySearchTreesZH::height(Node *node) {int nodeHeight = 0;int leftSonHeight = 0; //代表左子節(jié)點(diǎn)高度int rightSonHeight = 0; //代表右子節(jié)點(diǎn)高度if (node == nullptr){ //如果到了空結(jié)點(diǎn),則其高度為0nodeHeight = 0;return nodeHeight;}leftSonHeight = height(node->left);rightSonHeight = height(node->right);if (leftSonHeight >= rightSonHeight) //當(dāng)前結(jié)點(diǎn)的高度等于其左右子節(jié)點(diǎn)最大高度+1{nodeHeight = leftSonHeight + 1;}else{nodeHeight = rightSonHeight + 1;}return nodeHeight; }//! 求二叉樹的高度,迭代版本 //! 所謂二叉樹的高度就是二叉樹有多少層,所以在層序遍歷里加一個(gè)層數(shù)計(jì)數(shù)就可以了 //! 但這個(gè)層數(shù)計(jì)數(shù)反倒是難想,其實(shí)在層序遍歷的隊(duì)列中,上一層全部出隊(duì)后,下一層有多少元素,就是隊(duì)列的size() int BinarySearchTreesZH::heightNoRecursion(Node *node) {queue<Node *> list; //創(chuàng)建結(jié)構(gòu)體指針隊(duì)列,數(shù)據(jù)類型Node*,但是層序遍歷不用指針也可以if (node == nullptr){return 0;}else{list.push(node); //把根節(jié)點(diǎn)push進(jìn)去}int height = 0;int nextCengNum = 1; //! 第一層元素?cái)?shù)為1int j = 0; //! 循環(huán)計(jì)數(shù)器,每一層循環(huán)nextCengNum次就會(huì)清零,并高度+1while (list.size() != 0) //只要隊(duì)列不為空就一直出隊(duì)進(jìn)隊(duì){//這里就是把隊(duì)首的元素的左右子節(jié)點(diǎn)進(jìn)隊(duì),然后彈出隊(duì)首元素,就可以把二叉樹中所有節(jié)點(diǎn)一層一層的按次序進(jìn)隊(duì)和出隊(duì)//還是畫圖比較好理解if (list.front()->left != nullptr){list.push(list.front()->left);}if (list.front()->right != nullptr){list.push(list.front()->right);}list.pop();j++; //這里開始就是計(jì)算遍歷的層數(shù)的,遍歷次數(shù)每到達(dá)下一層元素?cái)?shù)時(shí)就代表一層if (j == nextCengNum){height++;nextCengNum = list.size();j = 0;}}return height; }

總結(jié)

以上是生活随笔為你收集整理的2021-10-09 求二叉树的高度(递归和迭代版本)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。