二叉樹的深度 數算MOOC
阿新 • • 發佈:2018-12-20
二叉樹的深度
題目內容:
給定一棵二叉樹,求該二叉樹的深度
二叉樹深度定義:從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的節點個數為樹的深度
輸入格式:
第一行是一個整數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; }