二叉树的深度
题目内容:
给定一棵二叉树,求该二叉树的深度
二叉树深度定义:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的节点个数为树的深度
输入格式:
第一行是一个整数n,表示二叉树的结点个数。二叉树结点编号从1到n,根结点为1,n <= 10
接下来有n行,依次对应二叉树的n个节点。
每行有两个整数,分别表示该节点的左儿子和右儿子的节点编号。如果第一个(第二个)数为-1则表示没有左(右)儿子
输出格式:
输出一个整型数,表示树的深度
输入样例:
3 2 3 -1 -1 -1 -1
输出样例:
2
#include <iostream>
using namespace std;
#define MAX 63536
int nums[12][2]={0};
struct node
{
int val;
node *l,*r;
node()
{
l=r=NULL;
}
} *root;
int find_height(node *cur)//递归求深度
{
if(!cur)return 0;
int l1=find_height(cur->l);
int r1=find_height(cur->r);
return l1>r1?l1+1:r1+1;
}
void build(int i,node *cur)//根据输入建立树
{
if(!cur)return ;
if(nums[i][0]!=-1)
{
node *t=new node;
t->val=nums[i][0];
cur->l=t;
// cout<<cur->l->val<<endl;
build(nums[i][0],cur->l);
}
if(nums[i][1]!=-1)
{
node *t=new node;
t->val=nums[i][1];
cur->r=t;
// cout<<cur->r->val<<endl;
build(nums[i][1],cur->r);
}
}
int main(int argc, char const *argv[])
{
int n;
cin>>n;
if(n<=0)
{
cout<<0;
return 0;
}
root =new node;
root->val=1;
if(n==1)
{
cout<<1;
return 0;
}
int i=1;
while(n--)
{
cin>>nums[i][0]>>nums[i][1];
i++;
}
build(1,root);//建树
cout<<find_height(root);//输出深度
return 0;
}