1. 程式人生 > >二叉樹的深度 數算MOOC

二叉樹的深度 數算MOOC

                                               二叉樹的深度

題目內容:

給定一棵二叉樹,求該二叉樹的深度

二叉樹深度定義:從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的節點個數為樹的深度

輸入格式:

第一行是一個整數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;
}