精华内容
下载资源
问答
  • 设计求二叉树高度算法
    2021-01-20 17:17:36

    C语言数据结构二叉树

    求一棵二叉树T的高度

    int bt_Height(BiTNode *T)
    {
       if(T==NULL)
          return 0;
       else
          if(T->lchild==NULL&&t->rchild==NULL)
             return 1;
          else
              retrun 1+max(bt_Height(T->lchild),bt-Height(T->rchild));
    }
    
    
    更多相关内容
  • 二叉树高度算法(递归、层次)

    千次阅读 2020-10-07 17:47:52
    方法一:递归 因为递归是先遍历完每棵子树再输出,所以只需要比较哪棵子树最深并返回该子树的高度并加上根结点(1)即为该二叉树高度。 代码:

    方法一:递归
    因为递归是先遍历完每棵子树再输出,所以只需要比较哪棵子树最深并返回该子树的高度并加上根结点(1)即为该二叉树的高度。

    代码:
    在这里插入图片描述

    方法二:层次遍历
    因为层次遍历是将每一层元素都输出后才遍历下一层,所以我们可以在遍历完每一层的最后一个结点后高度加一。
    如何判断是否为当前层的最后一个结点呢?可以用queue.size()来判断,当size(当前层元素个数),当size=0时即遍历完该层元素。
    代码:
    在这里插入图片描述

    展开全文
  • #include"stdio.h" #include"stdlib.h" typedef char DataType; typedef struct Node { DataType data; struct Node *leftChild; struct Node *rightChild.../*按先序序列建立一棵二叉树*/ void CreatBiTree(BiTre
    #include"stdio.h"
    #include"stdlib.h"
    typedef  char  DataType;
    typedef struct Node 
    {
    	DataType data;
    	struct Node *leftChild;	
    	struct Node *rightChild;
    }BiTreeNode;
    
    void  PrintData(DataType x)
    {
    	printf("%c",x);
    }
    
    /*按先序序列建立一棵二叉树*/
    void CreatBiTree(BiTreeNode **T)
    {
    	char  ch;
    	scanf("%c",&ch);
    	if(ch==' ')   {*T=NULL;return;}
    	else
    	{
    		if(!(*T=(BiTreeNode*)malloc(sizeof(BiTreeNode)))){printf("Overflow.\n");exit(0);}
    		(*T)->data =ch;
    		CreatBiTree(&((*T)->leftChild ));
    		CreatBiTree(&((*T)->rightChild ));
    	}
    }
    int Height(BiTreeNode *bt)  /*求二叉树bt的深度*/
    {int hl=0,hr=0;
     if (bt==NULL) return(0);
      else {
       hl=Height(bt->leftChild);
       hr=Height(bt->rightChild);
       if(hl>hr) return (hl+1);
            else return(hr+1);}
     }
     int main(){
     	BiTreeNode *t;
     	CreatBiTree(&t);
     	printf("%d",Height(t));
     	
     } 
     在这里插入代码片
    

    这里是引用

    展开全文
  • 二叉树高度计算算法思悟

    千次阅读 2018-04-09 00:15:55
    二叉树高度计算算法思悟 总体来说,现在掌握的二叉树高度计算算法共有递归算法、基于后序遍历的算法、基于层次遍历的算法三种; github系列源码 递归算法实现 递归算法依旧格式优美、逻辑清晰、实现简单,便于...

    二叉树高度计算算法思悟

    总体来说,现在掌握的二叉树高度计算算法共有递归算法、基于后序遍历的算法、基于层次遍历的算法三种;
    github系列源码

    1. 递归算法实现

      递归算法依旧格式优美、逻辑清晰、实现简单,便于理解,但是递归算法伴随着额外的系统开销,而这些额外的开销是可以避免的,既然有更好的实现,就不应安于现状~

      public int getHeight(){
          int height;
          int leftHeight=0;
          int rightHeight=0;
          if(leftTree!=null){
              leftHeight=leftTree.getHeight();//得到左子树高度
          }
          if(rightTree!=null){
              rightHeight=rightTree.getHeight();//得到右子树高度
          }
          height=(leftHeight>rightHeight?leftHeight:rightHeight)+1;//返回高度
          return height;
      }
    2. 基于后序遍历思想的实现

      从递归算法的实现来看,是不是很像二叉树后序遍历的实现代码:首先计算左子树高度(相当于后序遍历中首先访问左子树)然后计算右子树高度(然后访问右子树),最后返回树高(然后访问根结点);

      既然我们已经实现非递归的后序遍历算法,那么我们就可以照猫画虎啦~

      但是还有两点需要说明:

      第一:在计算过程中,我们通过栈的最大深度来反映从树的高度(为什么呢?),因为栈中保留着根结点到叶子结点(准确的说,是到所有结点的路径,自然也包括我们想要的叶子结点)的路径~而最长的路径自然反映树的高度~;

      第二:通过模拟中序遍历或者先序遍历可以达成目标吗?我觉得不可以~因为先序遍历时,访问某棵右子树时,其父节点已经弹出栈了,那么路径就不完整了,而中序遍历也是因为同样的原因,唯有后序遍历方可~(其实从递归算法的实现也可以理解,先序和中序遍历根本不像嘛);

      public int getHeight(){
          //通过后序遍历的思路计算树高
          int height=0;
          int currentHeight;
          //我们需要一个栈
          MyLinkedDeque<BinaryTreeNode<T>> stack=new MyLinkedDeque<>();
          BinaryTreeNode<T> currentNode=this,visited=null;//后序遍历所需要的辅助变量
          while(currentNode!=null||!stack.isEmpty()){
              while(currentNode!=null){
                  stack.addFirst(currentNode);
                  currentNode=currentNode.leftTree;
              }//常规操作,一直入栈,直到遇见null
              if(!stack.isEmpty()){
                  currentNode=stack.peekFirst();//注意,这里只是peek~
                  if(currentNode.rightTree!=null&&currentNode.rightTree!=visited){
                      currentNode=currentNode.rightTree;//进入右子树
                  }else {//访问
                      currentHeight=stack.size();//得到栈的深度(大小)
                      height=(height>currentHeight?height:currentHeight);//更新树的高度
                      stack.pollFirst();//功成身退;
                      visited=currentNode;
                      currentNode=null;//常规操作
                  }
              }
          }
          return height;//返回高度
      }
    3. 基于层次遍历思想的实现

      基于层次遍历,或者说树的宽度优先遍历思想设计的计算方法其核心为:每往下遍历一层,树的高度增加1;当遍历结束,自然可以得到树的高度;

      那么问题来了,怎样得到一棵树中某一层的结点?怎样判断遍历结束?怎样判断一个结点属于A层而不是A+1层?

      在方法2中,我们用的额外数据结构为栈,而这里,我们用到的是队列;所以我们访问一个结点时,就把它的子结点入队列,当访问完该结点以及该结点的兄弟结点时(也就是访问完一层结点),队列里自然保留了下一层要访问的结点;我们需要两个整型变量来帮助我们实现结点所属层次的判断:变量A用来记录正在访问的这一层还有多少结点尚未访问;变量B用来记录下一层结点的数目;一层访问完后,将变量B赋值给变量A即可;

      public int getHeight(){
          int height=0;
          int currentLevelNum=1;
          int nextLevelNum=0;
          MyLinkedDeque<BinaryTreeNode<T>> queue=new MyLinkedDeque<>();
          BinaryTreeNode<T> currentTree;
          queue.addLast(this);
          while(!queue.isEmpty()){
              while(currentLevelNum>0){
                  currentTree=queue.pollFirst();
                  if(currentTree.rightTree!=null){
                      queue.addLast(currentTree.rightTree);
                      nextLevelNum++;
                  }
                  if(currentTree.leftTree!=null){
                      queue.addLast(currentTree.leftTree);
                      nextLevelNum++;
                  }
                  currentLevelNum--;
              }//遍历完一层结点
              height++;
              currentLevelNum=nextLevelNum;
              nextLevelNum=0;//重置变量
          }
          return height;
      }
    展开全文
  • 递归计算二叉树高度Previously I wrote about an algorithm for finding out the height of a binary tree using iteration. Though that method gets the job done (in 7 steps no less), the same can be ...
  • } } } Golang 实现 定义树和节点 type AVLTree struct { root *AVLNode } type AVLNode struct { id int left *AVLNode right *AVLNode } 当前节点的高度 递归结算,并注意自身节点高度为1,递归一次累加1。...
  • 计算二叉树高度的两种方法

    千次阅读 2020-03-05 22:10:03
    思路:按后序遍历二叉树,节点最大栈长即为二叉树高度。 public class Solution {  public int TreeDepth(TreeNode root) {  if(root==null){  return 0;  }  int height=0;  Stack<TreeNode> ...
  • github地址:https://github.com/longyu109java实现二叉树的相关操作代码如下package 二叉树有关;import java.util.ArrayDeque;import java.util.Queue;public class CreateTree {/*** @param args*/public static ...
  • 以二叉链表作存储结构,设计求二叉树高度算法
  • 二叉树高度的三种计算方法

    万次阅读 多人点赞 2017-02-10 20:06:23
    计算二叉树高度可以采用几种不同的算法算法一:采用后序遍历二叉树,结点最大栈长即为二叉树的高度算法二:层次遍历二叉树,最大层次即为二叉树的高度算法三:采用递归算法,求二叉树的高度。 /法1:...
  • 计算二叉树高度的三种方法

    万次阅读 多人点赞 2018-09-17 20:23:39
    思路:按后序遍历二叉树,节点最大栈长即为二叉树高度。 public class Solution { public int TreeDepth(TreeNode root) { if(root==null){ return 0; } int height=0; Stack<TreeNode> nodes=...
  • 二叉树高度的递归算法中递归过程理解

    千次阅读 多人点赞 2019-07-04 12:08:16
    所以,递归,也是一种 典型的 用空间换时间 的算法。   5.如果root是空就返回0,如果非空就遍历子树。取最高子树,然后加1就得到了整棵树的高度。就这样递归下去的 6. 左子树的高度height(llink)...
  • 计算二叉树高度(深度) C/C++

    千次阅读 2020-07-02 17:39:40
    二叉树递归特性可以计算二叉树高度: 不多逼逼,code: #include<iostream> using namespace std; typedef struct BinaryTreeNode { char data; //数据 struct BinaryTreeNode *left; //左孩子 ...
  • 假设二叉树采用二叉链表存储结构,设计一个非递归算法二叉树高度。 参数: 辅助队 q(存储节点);1对位标记参数L(用来记录当前一层队尾所在位置);指针P(用来指向出队元素);记录高度参数 dept(记录当前高度...
  •  假设二叉树采用二叉链表存储结构,设计一个非递归算法二叉树高度算法思想  采用层次遍历的算法,设置变量level来记录当前结点所在的层数,设置变量last指向当前层的最右边的结点,每次层级遍历出队时与...
  • 递归和非递归方法(层次遍历)计算二叉树高度 1.递归方式计算二叉树高度 int Btdepth(BiTree T){ if(!T) return 0; ldep=Btdepth(T->lchild); rdep=Btdepth(T->rchild); return ldep>rdep? ldep+1:rdep...
  • 二叉树 - 递归计算二叉树高度(C语言)

    万次阅读 多人点赞 2018-04-03 21:54:31
    2.完整代码如下:/* 递归函数 - 计算二叉树高度(只有一个根节点的二叉树高为1) */ #include &lt;iostream&gt; #include &lt;malloc.h&gt; using namespace std; //二叉树节点定义 typedef int ...
  • 递归法求二叉树高度 递归法可以理解为一个子问题当一棵树只有左孩子和右孩子的时候我们只需要计算其左孩子的高度和其右孩子的高度并且求的他门两个之间的最大值并且+1即可 这个1就是根节点这样我们就得到了递归代码...
  • 二叉树高度、宽度计算

    万次阅读 多人点赞 2018-11-19 20:32:16
    二叉树高度可以采用迭代计算 public class TreeNode{ Data value; TreeNode left; TreeNode right; TreeNode(Data data,TreeNode left,TreeNode right) { this.data = data; this.left = left; this....
  • 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode ...
  • 二叉树的基本算法

    2020-07-14 16:48:07
    二叉树的遍历算法 二叉树的遍历主要分为三种:先序遍历,中序遍历和后序遍历。还有一种就是按照层次遍历。 按照惯例,左孩子优先于右孩子,那么: 先序遍历指的就是先访问本节点,再访问该节点的左孩子和右孩子;...
  • 今年大二,在学数据结构,有什么不对的地方还请大佬们指正。 #include<stdio.h> #include<stdlib.h> typedef char elemtype; struct BitNode{ elemtype data; BitNode *lchild,*rchild;... if(ch=='#'
  • 满意答案assonvoon2013.11.06采纳率:52%等级:12已帮助:9412人原题:以二叉链表为存储结构,分别写出求二叉树高度及宽度的算法。所谓宽度是指在二叉树的各层上,具有结点数最多的那一层上的结点总数。标准答案:①求...
  • 算法和求二叉树的最大宽度类似,均是使用层序遍历的方式进行。 int BDepth(BiTree T){ if(T == NULL) return 0; int front=rear=level=last=0;//头尾指针,层数,以及一层的最右的节点 BiTree Q[MaxSize]; Q...
  • 非递归算法二叉树高度

    千次阅读 2020-09-03 17:24:56
    Question:假设二叉树采用二叉链表存储结构,设计一个非递归算法二叉树高度。 Analysis: 1.用层次遍历来获得二叉树高度; 2.对二叉树进行层次遍历,需要借助队列; 3.每次遍历到该层的最右边的结点时,level...
  • 每从队列中出满一队节点,则高度+1。设置变量记录队列长度与新入队元素的数量,当队列长度与新入队元素数量相等时,表明队列中上一层节点已经全部出队,此时队列中的节点全部为同一层节点。 int findTreeHight...
  • 计算二叉树高度(C++实现)

    千次阅读 2020-04-11 23:10:53
    层序遍历二叉树,统计左右子树高度的最大值
  • 四、计算二叉树高度 五、输出叶节点 一、二叉链表 顺序链表适用性不强,直接链表 二叉链表:一个数据域和两个指针域 二叉链表的结构: typedef char TElemType; typedef struct BiTNode { TE...
  • 非递归求二叉树高度

    2021-03-26 10:28:15
    题目:假设二叉树采用二叉链表存储结构,设计一个非递归算法二叉树高度 分析: 若要采用非递归的方式来求得二叉树高度,我们采用层次遍历是最合适的,因为这一层一层的不就很好数吗哈哈。具体实现: 这里...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,420
精华内容 9,768
关键字:

计算二叉树的高度算法