首页 > 其他分享 >计算二叉树深度

计算二叉树深度

时间:2023-05-06 14:03:30浏览次数:40  
标签:Status return BiTree 深度 visit else 二叉树 计算 printf

解决思路

如果是空树,则深度为0;

否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1。

int Depth(BiTree T)
{
  if(T==NULL)
    return 0;
  else
  {
    m=Depth(T->lchild);
    n=Depth(T->rchild);
    if(m>n)
      return (m+1);
    else
      return (n+1);
  }
}

代码测试

#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int Status;
typedef char TElemType;
typedef struct BiTNode
{
	TElemType data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree *T)
{
	char ch;
	ch=getchar();
	if(ch=='#')
		*T=NULL;
	else
	{
		(*T)=(BiTNode*)malloc(sizeof(BiTNode));
		if(!*T)
			exit(OVERFLOW);
		(*T)->data=ch;
		CreateBiTree(&(*T)->lchild);
		CreateBiTree(&(*T)->rchild);
	}
	return OK;
}
Status PreOrderTraverse(BiTree T,Status (*visit)(TElemType e))
{
	if(T)
	{
		(*visit)(T->data);
		PreOrderTraverse(T->lchild,visit);
		PreOrderTraverse(T->rchild,visit);
	}
	else
		return OK;
}
Status InOrderTraverse(BiTree T,Status (*visit)(TElemType e))
{
	if(T)
	{
		InOrderTraverse(T->lchild,visit);
		(*visit)(T->data);
		InOrderTraverse(T->rchild,visit);
	}
	else
		return OK;
}
Status PostOrderTraverse(BiTree T,Status (*visit)(TElemType e))
{
	if(T)
	{
		PostOrderTraverse(T->lchild,visit);
		PostOrderTraverse(T->rchild,visit);
		(*visit)(T->data);
	}
	else
		return OK;
}
Status visit(TElemType e)
{
  printf("%c\t",e);
  return OK;
}
int Depth(BiTree T)
{
	int m,n;
	if(T==NULL)
		return 0;
	else
	{
		m=Depth(T->lchild);
		n=Depth(T->rchild);
		if(m>n)
			return (m+1);
		else
			return (n+1);
	}
}
int main()
{
	BiTree T;
	char ch;
	int n;
	printf("请输入一个二叉链表:");
    CreateBiTree(&T);
	printf("先序遍历的二叉链表为:\n"); 
    PreOrderTraverse(T,visit);
    printf("\n");
    printf("中序遍历的二叉链表为:\n"); 
    InOrderTraverse(T,visit);
    printf("\n");
    printf("后序遍历的二叉链表为:\n");
	PostOrderTraverse(T,visit);
	printf("\n"); 
	n=Depth(T);
	printf("二叉树的最大深度为%d\n",n);
    return 0;
}

计算二叉树深度_递归计算

标签:Status,return,BiTree,深度,visit,else,二叉树,计算,printf
From: https://blog.51cto.com/heliotopekxy/6249599

相关文章

  • 二叉树全分析(超详细总结建议收藏)
    个人主页:【......
  • Wireshark的安装及基本使用【计算机网络】
    Wireshark的安装与基本使用【计算机网络】前言推荐Wireshark的安装与基本使用一、下载二、安装三、使用技巧四、简单使用4.1捕获4.2简单介绍4.3过滤问题最后前言2023-5-420:51:42以下内容源自《【计算机网络】》仅供学习交流使用推荐Wireshark的下载安装及简单使用教程链接:ht......
  • USART-CH32FV1x_2x_V3x--串口波特率误差分析及计算
    串口通讯波特率出现误差的因素串口通讯是一种异步通讯,收发双方需要按照约定的波特率进行通讯。当波特率出现误差时,在一些高精度要求场所可能会导致通讯出错。那导致波特率出现误差的因素都有哪些呢,今天就来分析一下。1.分频误差 首先,波特率是根据系统时钟分频产生的,而系统时......
  • 二叉树的操作
    二叉树的操作二叉树的复制如果是空树,递归结束否则,申请新结点的空间,复制根结点递归复制左子树递归复制右子树代码实现#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<vector>#include<cstring>#include<unordered_se......
  • 先序 中序建立二叉树!!!
    真不错终于写出来了#include<iostream>#include<map>usingnamespacestd;constintN=20010;intpreorder[N],inorder[N],w[N],n,ans[N];map<int,int>ha_sh;structnode{intnum;node*left;node*right;node(intx){num=x,left=nullptr,right=n......
  • 易基因:2023年植物表观转录组研究的最新进展(m6A+m5C)|深度综述
    大家好这里是专注表观组学十余年,领跑多组学科研服务的易基因。被称为表观转录组(epitranscriptome)的RNA修饰正成为基因调控的广泛调控机制。由于绘制转录组范围RNA修饰测序策略的改进,以及分别对沉积、去除和识别RNA修饰的writers、erasers和readers密集表征,表观转录组学领域最......
  • 计算机网络功能
    1.资源共享。资源共享是计算机网络的一个非常重要的功能,所有的计算机网络建设的核心目的就是为了实现资源共享。资源共享是推动计算机网络产生和发展的的源动力之一。无论是第一代面向终端的计算机,还是后来的二代、第三代网络都将方便、高效的共享分布资源作为设计和追求的目标。共......
  • python练习-简单计算器
    #*_*coding:utf8*_*#简单计算器importtkinterfromfunctoolsimportpartial#按钮输入调用defget_input(entry1,argu):#从entry窗口展示中获取输入的内容input_data=entry1.get()#合法运算符:+-*/--**//+-#------------输入合法性判断的......
  • 2023.5.5 《动手学深度学习》第3、4章
    今天继续学习《动手学习深度学习》第3章:线性神经网络、第4章:多层感知机,今天学到的内容主要有这两章的概念,另外,完成了Kaggle房价预测的代码复现(Kaggle_HousePricePrediction.ipynb)。一、理论部分:1、概念解释:超参数:可以调整但不在训练过程中更新的参数称为超参数2、DL操作数......
  • 计算机系统基础----特殊类型(数组,结构体 ,联合体)的分配
    《数组》《数组的分配与访问》首先我们要知道在8086中内存的结构如图: 可见一个单元格有8bit(1B) 对于指针类型数据占4字节,char占1个字节,int占4个字节,short占2个字节,double占8个字节 当我们访问数组中的数据时是要访存的,当要访存时,我们只知道数组的......