-
2020-09-22 18:58:16
//后序遍历求二叉树高度 //后序要求的值的变化从底向上 int PostTreeDepth(PBiTNode bt) { int hl,hr,maxn; if(bt!=NULL) { hl=PostTreeDepth(bt->LChild); hr=PostTreeDepth(bt->RChild); maxn=hl>hr?hl:hr; return maxn+1; } else return 0; } //先序遍历求二叉树高度 //先序要求的值的变化从顶向下 int depth=0; void PreTreeDepth(PBiTNode bt,int h) //h的初值为1 { if(bt!=NULL) { if(h>depth) depth=h; // 如果该结点层次值大于depth PreTreeDepth(bt->LChild,h+1); PreTreeDepth(bt->RChild,h+1); } }
更多相关内容 -
层次遍历求二叉树的高度(非递归)
2018-08-05 15:43:34所谓层次遍历,是将二叉树中的元素从根节点按照节点层数一层层的输出。 代码如下: int GetDepth(bitreenode *root) { int depth=0; bitreenode *p=root; queue<bitreenode*> q; q.push(p); //...来自大佬群主的第二题
所谓层次遍历,是将二叉树中的元素从根节点按照节点层数一层层的输出。
代码如下:
int GetDepth(bitreenode *root) { int depth=0; bitreenode *p=root; queue<bitreenode*> q; q.push(p); //根指针入队 while(!q.empty()) { depth++; //高度加一 int width=q.size(); //获取当前层次宽度 for(int i=0;i<width;i++) { p=q.front(); //获取队顶元素 q.pop(); //弹出队顶元素 if(p->leftchild!=NULL) //左孩子入队 q.push(p->leftchild); if(p->rightchild!=NULL) //右孩子入队 q.push(p->rightchild); } } cout<<depth<<endl; }
-
层序遍历求二叉树(链式存储结构)的高度
2019-10-09 16:59:25int Btdepth(Bitreee T){ if(!T) return 0; //如果是空树,则高度为1; int front =-1,rear=-1; //定义顺序队列,队列元素是二叉树结点指针,用于层序访问链式二叉树; BiTree Q[MaxSize]; ...int Btdepth(Bitreee T){ if(!T) return 0; //如果是空树,则高度为1; int front =-1,rear=-1; //定义顺序队列,队列元素是二叉树结点指针,用于层序访问链式二叉树; BiTree Q[MaxSize]; int last=0,level=0; //last表示当前层的最右节点在队列中的序号。level用于计算数地高度。 Q[++rear]=T; //根节点进队 BiTree p; while(front<rear){ //队不空 p=Q[++front]; //出队 if(p->lchild) //左右孩子入队 Q[++rear]=p->lchild; if(p->rchild) Q[++rear]=p->rchild; if(front==last){ //当出队到最右节点时,当前层次遍历完成,高度+1。更新新的最右节点的位置 level++; last=rear; } } return level; }
思路:
二叉树的高度等于层数,要求层数,只需找到每层最右节点的个数。
当队头指针=最右节点时,更新最右节点。因为此时队列中正好刚刚将下一层的所有结点都遍历了,此时的队尾结点就是要更新的最右节点。
循环结束条件同层序遍历结束条件,队空时跳出循环
-
递归和非递归方法(层次遍历)计算二叉树高度
2021-08-12 17:52:02递归和非递归方法(层次遍历)计算二叉树高度 1.递归方式计算二叉树高度 int Btdepth(BiTree T){ if(!T) return 0; ldep=Btdepth(T->lchild); rdep=Btdepth(T->rchild); return ldep>rdep? ldep+1:rdep...递归和非递归方法(层次遍历)计算二叉树高度
1.递归方式计算二叉树高度
int Btdepth(BiTree T){ if(!T) return 0; ldep=Btdepth(T->lchild); rdep=Btdepth(T->rchild); return ldep>rdep? ldep+1:rdep+1; }
2.层次遍历方法计算二叉树高度:
算法思想:last指向每层最右结点,level为高度。从头节点开始,
边入队,然后再出队进行层次遍历,并将孩子结点入队,此时rear
指向下一层最右结点。而我们在出队遍历时,遍历完当前层front
指向的也是最右结点。所以在代码中,front==last作为判断遍历完
当前层的条件。rear指向的是下层的最右结点,故将last赋值为rear。int Btdepth(BiTree T){ if(!T) return 0; int last=0, level=0; int front=-1, rear=-1; BiTree Q[MaxSize];//设置队列Q,元素为二叉树的结点指针,且容量足够 Q[++rear]=T;//根节点入队 BiTree p; while(front<rear){//队不空则循环 p=Q[++front];//队列元素出队,即正在访问的结点 if(p->lchild) Q[++rear]=p->lchild;//左孩子入队 if(p->rchild) Q[++rear]=r->rchild;//有孩子入队 if(front==last){//处理该层的最右结点 level++;//层数加1 last=rear;//last指向下层 } } }
-
二叉树层次遍历非递归求树的高度C语言
2020-07-26 17:19:26设置level变量记录层数,last变量记录该层最右结点,在层次遍历出队时,让队列的front指针与last对比,相等证明该层遍历完了,last=rear,同时level+1,直至遍历完成,即队列为空,此时level即为二叉树的高度。... -
数据结构_求二叉树的高度以及层次遍历二叉树算法_C语言源代码
2014-07-20 12:41:17int Height(BTNode *T)//求二叉树高度 { int L,R; if(NULL == T) return 0; else { L=Height(T->lchild); R=Height(T->rchild); return L>R ? L+1 :R+1; -
07.二叉树的遍历和求其高度
2022-01-05 13:17:29二叉树如图 先序遍历 访问顺序: 根节点、前序遍历左子树,前序遍历右子树 7、4、2、1、3、5、9、8、11、10、12 递归遍历代码: public void preorderTraversal() { preorderTraversal(root); } public ... -
求二叉树高度算法(递归、层次)
2020-10-07 17:47:52方法一:递归 因为递归是先遍历完每棵子树再输出,所以只需要比较哪棵子树最深并返回该子树的高度并加上根结点(1)即为该二叉树的高度。 代码: -
【数据结构】-树-求二叉树的高度/深度(层次遍历方法与递归方法)
2020-06-17 16:34:54层次遍历算法: int Height_Tree(BiTree T) { BiTNode* Q[100];//用数组做队列 int front = -1;//当前访问的节点 int rear = -1;//下一层新加入的节点 int level = 0, last = 0;//当前层的最后一个节点 ... -
非递归遍历算法求二叉树的高度(附递归算法)
2019-07-17 20:49:25//使用非递归算法实现求二叉树的高度 //我们可以采用层序遍历的方式(使用顺序存储结构),设置一个last指针指向每层的最后一个节点指针,当出队时比较出队指针和last指针,若相同那么level+1 int Hight(BiTree T){ ... -
使用队列层次遍历实现二叉树可视化(没有树枝)
2022-04-08 21:58:53作为一个数据结果初学者,最近在学习二叉树的过程...首先,我们可以用二叉树的层次遍历,在层次遍历的基础上,每遍历一层,就在末尾输出一个换行,那么就可以将二叉树的基本层次结构输出出来。层次遍历如何实现呢?... -
Java层次创建二叉树,前序、中序、后序、层序遍历二叉树的非递归实现,获得二叉树的高度
2022-04-19 13:45:011. 二叉树节点 package entity; public class TreeNode { //数据域 public int val; //左孩子 public TreeNode left; //右孩子 public TreeNode right; //构造函数1 public TreeNode(int val) { this.val... -
新手求助帖python二叉树遍历方法及其求二叉树高度
2020-12-09 10:26:59python二叉树遍历方法及其求二叉树高度 新人求助 先上代码 代码: class BinaryTreeNode(object): def __init__(self): self.data='#' self.leftchild=None self.rightchild=None class TreeState(object): def... -
七十七、 二叉树的层次遍历和最大深度
2021-01-12 03:43:55「@Author:Runsen」在讲解二叉树的时候,提到二叉树的遍历除了前中后序遍历,还有层次遍历。前中后序这三种遍历方法以及可以通过递归的方式实现了,那么今天就来讲讲层次遍历吧!LeetCode 第 102题:二叉树的层次... -
二叉树的层次遍历
2020-02-08 20:40:45二叉树的层次遍历有两种方法,分别是迭代法和递归法 迭代法 迭代法主要用到队列,将下一层的元素放到队列尾部,从队列首部弹出元素,代码如下 class Solution { public: vector<vector<int>> level... -
数据结构——二叉树的层次遍历
2020-11-24 12:10:07进行层次遍历时构建一个辅助队列,先将二叉树根节点入队,然后出队,访问出队结点,若它有左子树,将左子树根节点入队,然后出队,访问出队结点…,右子树也同样如此,循环往复直到队列为空 1.构建好辅助队列Q和... -
剑指offer ====二叉树(二叉树深度、二叉树镜像、层次遍历、前中序遍历重建、平衡二叉树、下一个结点)
2020-08-04 22:57:29本题目就是最简单的二叉树遍历,我们可以用递归的方法,分别对二叉树的左右子树进行遍历,找到最大路径的子树,对脚标加1。 C++代码 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *... -
二叉树的先、中、后、层次遍历、构造的实现
2013-03-30 12:45:04使用二叉树的链式存储结构,运用二叉树的先序,中序,后序遍历递归实现二叉树遍历,二叉树的构造通过先序序列、线序序列和中序序列、拷贝构造函数构造完成,实现了二叉树节点个数计算,高度计算,关键值查找,节点的... -
java实现二叉树的层次遍历
2018-03-20 14:16:52昨天面试的时候遇到这个问题,由于太久没有接触算法和数据结构了,导致遗忘的比较彻底,当时记得使用队列的特性可以实现层次遍历...所以今天着重记录一下,如何正确的使用队列的特性去实现二叉树的层次遍历。当然这... -
根据二叉树的后续遍历序列和中序遍历序列,输出层次遍历序列
2021-04-22 21:14:23根据二叉树的后续遍历序列和中序遍历序列,输出层次遍历序列 【问题描述】 l 需要基于二叉链表来实现二叉树ADT l 需要实现二叉树的各个基本操作 l 假设二叉树中每个结点的关键字为不相同的正整数。给定二叉树的后序... -
利用层次遍历非递归求二叉树高度
2016-09-30 17:47:42利用层次遍历非递归求二叉树高度主要的思想是:一层一层地出队列 — 在我们每次访问完一层时,这时队列中存储的刚好是下一层的所有元素。所以在下一次循环开始时,首先记录该层的元素个数,一次性访问完这一层的所有... -
二叉树高度,栈实现二叉树的先序,中序,后序遍历的非递归遍历,二叉树层次遍历
2015-03-29 21:29:33树是递归定义的,所以用递归算法去求一棵二叉树的高度很方便。 #include #include using namespace std; struct Node { char data; Node *lchild; Node *rchild; }; void High(Node *T, int &h) -
Python实现二叉树前序、中序、后序及层次遍历示例代码
2020-12-26 11:02:30前言 树是数据结构中非常重要的一种,主要的用途是用来... 队列实现层次遍历 # -*- coding=utf-8 -*- class Node(object): """节点类""" def __init__(self, element=-1, l_child=None, r_child=None): self.eleme -
求二叉树的层次遍历oj
2018-01-23 09:01:40求二叉树的层次遍历 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 已知一颗二叉树的前序遍历和中序遍历,求二叉树的层次遍历。 Input 输入数据有多组,输入T,代表有T组测试... -
求二叉树的最大深度(leetCode-104)使用后序遍历和前序遍历
2019-03-21 19:54:27给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ... -
二叉树的先序中序后序层次遍历,高度
2011-04-14 11:59:43从键盘输入二叉树的各结点... 2 )分别实现先序、中序、后序递归遍历二叉树 3 )输出二叉树的高度 4 )输出二叉树的按层次遍历序列 5 )输出二叉树的先序非递归遍历下的结点访问次序 6 )以菜单方式运行 -
遍历二叉树C实现代码
2018-02-24 20:17:25遍历二叉树的几种算法实现,主要如下: 1.前序遍历二叉树; 2.中序遍历二叉树; 3.后序遍历二叉树; 4.层次遍历二叉树。 -
树的先序(后序)中序构建二叉树 和树遍历+求树的深度和高度
2021-11-22 20:47:413.树的层次遍历 4.判断树的高度和深度: 5.树的销毁 1.树的先序(后序)中序构建二叉树 树的先序遍历: 根 左 右 树的中序遍历: 左 根 右 树的后序遍历 左 右 根 我们明确 只有先序中序或者后序中序能... -
二叉树的前中后遍历、层次遍历、树高,叶子节点、由两种遍历求树
2021-10-18 17:58:04二叉树的前层次序遍历 求叶子节点 求树高 又前序遍历和中序遍历求树 Java代码拿去即可运行 package leetcode; public class TreeNode { private Integer value; private TreeNode left; private TreeNode...
收藏数
14,618
精华内容
5,847