二叉树的深度

何海涛:《剑指Offer:名企面试官精讲典型编程题》:九度OJ

题目描述:http://ac.jobdu.com/problem.php?cid=1039&pid=21

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

输入:

第一行输入有n,n表示结点数,结点号从1到n。根结点为1。 n <= 10。

接下来有n行,每行有两个个整型a和b,表示第i个节点的左右孩子孩子。a为左孩子,b为右孩子。当a为-1时,没有左孩子。当b为-1时,没有右孩子。

输出:

输出一个整型,表示树的深度。

样例输入:
3
2 3
-1 -1
-1 -1

样例输出:

            2

思想:这个没什么思想,就是树的遍历而已


代码AC:

#include <stdio.h>
#include <stdlib.h>

typedef struct tree
{
        int id;
        int vi;
        int lc;
        int rc;
}tree, *p_tree;

int n;
p_tree t;
int level;

void fun( int idx, int l )
{
     int tmp;
     
     if( t[idx].lc == -1 && t[idx].rc == -1 )
     {
         if( l > level )
         {
             level = l;
         }
     }
     else
     {
         if( t[idx].rc <= n && t[idx].rc >= 1 )
         {
             fun( t[idx].rc - 1, l + 1 );
         }
         
         if( t[idx].lc <= n && t[idx].lc >= 1 )
         {
             fun( t[idx].lc - 1, l + 1 );
         }
     }
}

int main()
{
    int i;
    
    while( scanf("%d", &n) != EOF )
    {
           t = ( p_tree )malloc( sizeof( tree ) * n );
           
           for( i = 0; i < n; i++ )
           {
                t[i].id = i + 1;
                scanf("%d%d", &t[i].lc, &t[i].rc);
           } 
           
           level = -1;
           fun( 0, 1 );
           
           printf("%d\n", level);
    }
    
    return 0;
}



你可能感兴趣的:(二叉树的深度)