精华内容
下载资源
问答
  • 就一句话,给自己做记录的 求树的高度时; 左右子树,递归到底时返回的高度,无所谓是左还是右,到最后,高的那一个会返回给上一层的父结点

    就一句话,给自己做记录的
    求树的高度时;
    左右子树,递归到底时返回的高度,无所谓是左还是右,到最后,高的那一个会返回给上一层的父结点

    展开全文
  • 假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树的高度 算法实现: int T_high(BiTree T){ if(T == NULL){ return 0; } int high = 0; int front = rear = -1; int last = 0; //指向下一层第...

    问题:

    假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树的高度

    算法实现:

    int T_high(BiTree T){
        if(T == NULL){
            return 0;
        }
        int high = 0;
        int front = rear = -1;
        int last = 0;					//指向下一层第一个结点
        BiTree Q[MaxSize];
        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){
                high++;
                last = rear;
            }
        }
        return high;
    }
    
    展开全文
  • 题目:以孩子兄弟链表为存储结构,请设计递归算法求树的高度 分析:如果只有根节点,那么高度为1,如果有左孩子,那么高度由左孩子的左子树和右子树决定,取其大者。 代码如下: typedef struct node { char ...

    题目:以孩子兄弟链表为存储结构,请设计递归算法求树的高度

    分析:如果只有根节点,那么高度为1,如果有左孩子,那么高度由左孩子的左子树和右子树决定,取其大者。

    代码如下:

    typedef struct node {
    	char data;
    	node *fch, *nsib;
    }Tree;
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    Tree *create(Tree *T) {//先序创建一颗二叉树
    	char data;
    	printf("请输入当前节点值:data=");
    	scanf("%c", &data);
    	getchar();
    	if (data != '#') {
    		T = (Tree *)malloc(sizeof(Tree));
    		T->data = data;
    		T->fch = NULL;
    		T->nsib = NULL;
    		T->fch = create(T->fch);
    		T->nsib = create(T->nsib);
    	}
    	return T;
    }
    int getHigh(Tree *T,int high) {
    	if (!T) {//空返回当前高度,这是递归的出口
    		return high;
    	}
    	else {
    		int lhigh = getHigh(T->fch,high+1);//记录左子树高度
    		int rhigh = getHigh(T->nsib,high);//记录右兄弟的高度,注意这里high不能再加一,因为他们是兄弟,平级
    		lhigh > rhigh ? high = lhigh : high = rhigh;//取其大者
    		return high;
    	}
    }
    int main() {
    	Tree *T = (Tree *)malloc(sizeof(Tree *));
    	T = create(T);
    	int high = 0;
    	high = getHigh(T,high);
    	printf("树的高度为:%d",high);
    	return 0;
    }

     你想要的,岁月凭什么给你,所有逆袭,都是有备而来,所有光芒,需要时间才能被看到,所有幸运,都是努力埋下的伏笔。所以,你不努力谁也给不了你想要的生活。

    展开全文
  • #include #include #include typedef struct BiTNode { int date; struct BiTNode *lchild, *rchild;...void inOrder(BiTNode *root)//中序遍历递归算法 { if (root == NULL) { return; } inO
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct BiTNode
    {
    	int date;
    	struct BiTNode *lchild, *rchild;//二叉树左枝,右枝
    }BiTNode;
    
    void inOrder(BiTNode *root)//中序遍历递归算法
    {
    	if (root == NULL)
    	{
    		return;
    	}
    	inOrder(root->lchild);//遍历左枝
    	printf("%d  ", root->date);//打印节点
    	inOrder(root->rchild);//遍历右枝
    }
    
    int Depth(BiTNode * root)//递归求树的高度
    {
    	int DepthLeft = 0;//左树高度
    	int DephRight = 0;//右树高度
    	int DepthLast = 0;//最后树的高度
    	if (root == NULL)
    	{
    		return 0;
    	}
    	DepthLeft = Depth(root->lchild);
    	DephRight = Depth(root->rchild);
    	DepthLast = 1 + (DepthLeft > DephRight ? DepthLeft : DephRight);
    	
    	return DepthLast;
    }
    
    BiTNode * CopyTree(BiTNode * root)
    {
    	if (root == NULL)
    	{
    		return NULL;
    	}
    	BiTNode * NewNode = NULL;
    	BiTNode * NewLef = NULL;
    	BiTNode * NewRig = NULL;
    
    	
    
    	if (root->lchild != NULL)
    	{
    		NewLef = CopyTree(root->lchild);
    	}
    	else
    	{
    		NewLef = NULL;
    	}
    
    
    	if (root->rchild != NULL)
    	{
    		NewRig = CopyTree(root->rchild);
    	}
    	else
    	{
    		NewRig = NULL;
    	}
    
    	NewNode = (BiTNode *)malloc(sizeof(BiTNode));
    	if (NewNode == NULL)
    	{
    		return NULL;
    	}
    	NewNode->lchild = NewLef;
    	NewNode->rchild = NewRig;
    	NewNode->date = root->date;
    
    	return NewNode;
    
    
    }
    void main()
    {
    	BiTNode t1, t2, t3, t4, t5;
    	memset(&t1, 0, sizeof(BiTNode));//初始化内存的数据
    	memset(&t2, 0, sizeof(BiTNode));
    	memset(&t3, 0, sizeof(BiTNode));
    	memset(&t4, 0, sizeof(BiTNode));
    	memset(&t5, 0, sizeof(BiTNode));
    	t1.date = 1;
    	t2.date = 2;
    	t3.date = 3;
    	t4.date = 4;
    	t5.date = 5;
    	t1.lchild = &t2;
    	t1.rchild = &t3;
    	t2.rchild = &t4;
    	t3.lchild = &t5;
    	
    	int height = Depth(&t1);
    	printf("树的高度:%d\n",height);
    
    	printf("*********************\n递归算法中序遍历:\n");
    	inOrder(&t1);
    	printf("\n*********************\n");
    
    	BiTNode *tmp = NULL;
    	tmp = CopyTree(&t1);
    	printf("*********************\n递归算法中序遍历:\n");
    	inOrder(tmp);
    	printf("\n*********************\n");
    
    	
    
    
    	system("pause");
    
    
    
    }

    展开全文
  • //孩子链存储结构下树的基本运算算法求树t的高度 #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #define MaxSons 10 #define MaxSize 100 typedef struct node { char data; //节点...
  • //孩子兄弟链存储结构下树的基本运算算法求树t的高度 #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #define MaxSize 100 typedef struct tnode { char data; //节点的值 struct ...
  • 求树的高度

    2017-07-20 20:46:09
    递归算法int high(Tree r) { if(r==NULL) return 0; int left=high(r->lchild); int right=high(r->rchild);...}非递归算法**每访问到一层最右结点就高度+1,怎么定位每一层最右结点呢??** 每
  • 【C++】BFS求树的高度

    2021-02-19 20:24:04
    求树的高度本质就是层次遍历树,遍历完后记录下最大的层数,所以可以改造BFS遍历树的算法来实现求解树的最大深度 先来回顾一下BFS遍历二叉树 BFS层次遍历二叉树 其实遍历一般的树也是同样的思路,每次需要将某个节点...
  • 算法:二叉树的高度

    千次阅读 2018-12-20 20:30:23
    问题引入(树之高度) 输入描述 对于一个二叉树,输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,下面是n-1行,每行有两个整数,第...使用递归法求树的高度 int getdeep_1(treeType...
  • 经典算法学习——二叉树的高度

    万次阅读 2016-10-02 21:10:39
    求树的高度也是如此。分别求左右子树的高度,然后取较长的子树作为高度。代码上传至 https://github.com/chenyufeng1991/BinaryTreeHeight 。核心代码如下:int BinaryTreeHeight(Node *node) { int treeHeight = ...
  • 1、二叉树中节点个数 递归解法: (1)如果二叉树为空,节点个数为0 (2)如果二叉树不为空,二叉树节点个数 = 左子树节点个数 + 右子节点个数 + 1 int NodeNum(BTNode * root) { if(root== NULL) // 递归...
  • 求一棵二叉树的高度以及求一个节点的...求树的高度 我们只需在树的节点类中写如下方法: 返回的是以当前节点为根节点的树的高度 public int height() { return Math.max(left==null?0:left.height(),right==null?0:r
  • 算法笔记练习 题解合集 ...这棵树的高度(根节点为第1层) 样例输入 5 1 2 1 3 3 4 3 5 样例输出 3 思路 用二维vector来存储这颗树,二维vector中的每一个一维vector代表一个结点,一维vector中下标...
  • 二叉树 最优二叉树 算法实现 源码 高度 结点 叶子 输出 源码 源代码 建立二叉树算法 二叉树高度算法的递归模型 二叉树结点个数算法的递归模型 二叉树叶子结点个数算法的递归模型 以括号表示法输出二叉树...
  • 1.给出树的双亲表示法,树的高度 有一棵合法的树(不一定是二叉树),节点用数字表示,现给出所有节点的父子关系,树的高度! 输入包含若干行,每行2个数字,中间以空格隔开,第一个数字表示父亲节点,第二...
  • =NULL){//在不为空时候才能讨论左右结点 if(L->lchild==NULL&&L->rchild==NULL)c++; Leaf(L->lchild,c); Leaf(L->rchild,c); } return c; } void GetFloor(BiTree L,char data,int floor,int &res){ if(L!...
  • 这棵树的高度(根节点为第1层) 样例输入Copy 5 1 2 1 3 3 4 3 5 样例输出 Copy 3 代码: #include <bits/stdc++.h> using namespace std; const int maxn = 10000; int n, d; struc..
  • 算法思想: 采用层次遍历的算法思想,设置变量level 来记录当前结点所在的层数,设置last指向当前层数的最右结点,每次层次遍历出队时与last指针比较,相等则层数加一,并让last指向下一层的最右结点。 每处理到这一...
  • 二叉树的高度(Maximum Depth of Binary Tree) // 时间复杂度O(n),空间复杂度O(logn) class Solution { public:  int maxDepth(TreeNode *root) {  if (root == nullptr) return 0;  return max...
  • 二叉树是一个高频考点,所以今天来分享一道二叉树求高度的问题。 概念 在进行解题之前我们先看一下,什么是二叉树? 二叉树是形结构的一种重要类型,在实际应用中具有十分重要的意义。 二叉树是n个结点的有限集合...
  • 这里简述孩子兄弟链表的非递归算法,如果A结点存在左孩子,且A结点的兄弟结点没有孩子,则该兄弟可以跳过不入队(因为A结点的兄弟结点树的高度不可能比A结点左孩子所在高度更高) typedef struct CsNode{ struct ...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 363
精华内容 145
关键字:

求树的高度的算法