首页 > 编程知识 正文

采用递归的思想求二叉树的深度,二叉树递归求深度如何理解

时间:2023-05-05 15:05:27 阅读:14685 作者:3139

剑指Offer 55 - I .二叉树深度

输入一根二叉树的根节点,求出该树的深度。 从根节点到叶节点依次通过的节点(包括根、叶节点)形成树的路径,最长路径的长度为树的深度。

和题注相比,我写的好像坤shit

//! 求二叉树的高度,递归版本//! 递归的精髓是把大问题分解成解答过程相同的小问题//! 由于需要根节点的高度,因此根节点的高度等于其子节点的最大高度加上1//! 问题会转换为求解每个节点及其子节点的高度,但最小的问题是叶节点的子节点为空,高度为0 intbinarysearchtreeszh 3360: height (node * node ) { int nodeHeight=0 int leftSonHeight=0; //表示左子节点高度的int rightSonHeight=0; //右子节点的高度if(node==nullptr ) /到空节点时,其高度为0 nodeHeight=0; 返回节点高; } leftsonheight=height (node-left ); rightsonheight=height (node-right ); if (leftsonheight=rightsonheight ) /当前节点高度为其左右子节点的最大高度1(nodeheight=leftsonheight1; } else { node height=rightsonheight 1; }返回节点高; //! 二叉树高度,迭代版本//! 二叉树的高度是指二叉树有几层,所以在层序导线中增加层数计数就可以了//! 但是,这个层数的计数反而很难考虑。 实际上,在层序遍历队列中,上层全部退出团队后,下层有多少要素,就是队列的size (intbinarysearchtreeszh 33603360 heightnorecursion (node ) ) 但是,即使不使用指针,层序遍历也是if(node==nullptr ) { return 0; }else{list.push(node ); //推送根节点(} int height=0; int nextCengNum=1; //! 第一层元素数为1 int j=0; //! 循环计数器在每层循环nextCengNum次后被清除,高度为1while(list.size )!=0() ) /只要队列不空闲,就可以对队列开头元素的左右子节点进行排队,弹出队列开头元素,这样二叉树的所有节点就可以一级一级地按顺序排队或从队列中取出(/还是画画=nullptr(list.push ) list.front )-left ); }if(list.front ()-right!=nullptr(list.push ) list.front )-right ); (} list.pop ); j; //从这里开始计数扫描的层数,扫描次数在每次达到下一个层次的要素数时为层次IF(J===Nextcengnum ) { height; nextCengNum=list.size (; j=0; } }返回高度; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。