剑指Offer之二叉树的深度

简介:

【题目】

题目描述:

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

输入:

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

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

输出:

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

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

【解析】



通过递归,迭代计算左右子树的深度,+1.

有一个利好的消息是第n个节点数值为n,这样我们就可以利用二维数组来表示树结构。
在程序中利用二维数组来表示树结构,[i][0]为第i个节点的左节点,[i][1]为第i个节点的右节点


【代码】

/*********************************
*   日期:2013-12-06
*   作者:SJF0115
*   题号: 题目1350:二叉树的深度
*   来源:http://ac.jobdu.com/problem.php?pid=1350
*   结果:AC
*   来源:剑指Offer
*   总结:
**********************************/
#include <iostream>
#include <malloc.h>
#include <stdio.h>
using namespace std;
/*
通过递归,迭代计算左右子树的深度,+1.
在程序中利用二维数组来表示树结构,[i][0]为第i个节点的左节点,[i][1]为第i个节点的右节点
*/
int tree[11][2];

int TreeDepth(int n){
    //第n个节点为叶子节点
    if(tree[n][0] == -1 && tree[n][1] == -1){
        return 1;
    }
    int left = 0,right = 0;
    //迭代计算左右子树的深度
    //左子树
    if(tree[n][0]!= -1)
    {
        left = TreeDepth(tree[n][0]);
    }
    //右子树
    if(tree[n][1]!= -1)
    {
        right = TreeDepth(tree[n][1]);
    }
    return 1 + max(left,right);
}

int main() {
    int i,n,height;
    while(scanf("%d",&n) != EOF){
        //用二维数组表示二叉树
        for(i = 1;i <= n;i++){
            scanf("%d %d",&tree[i][0],&tree[i][1]);
        }
        height = TreeDepth(1);
        printf("%d\n",height);
    }//while
    return 0;
}


目录
相关文章
|
6月前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
【剑指offer】-二叉树的深度-36/67
【剑指offer】-二叉树的深度-36/67
|
12月前
|
算法
代码随想录算法训练营第十五天 | LeetCode 104. 二叉树的最大深度、559. N 叉树的最大深度、111.二叉树的最小深度、222. 完全二叉树的节点个数
代码随想录算法训练营第十五天 | LeetCode 104. 二叉树的最大深度、559. N 叉树的最大深度、111.二叉树的最小深度、222. 完全二叉树的节点个数
53 0
【Leetcode -100.相同的树 -104.二叉树的深度】
【Leetcode -100.相同的树 -104.二叉树的深度】
37 0
剑指offer 59. 二叉树的深度
剑指offer 59. 二叉树的深度
55 0
剑指offer_二叉树---二叉树的深度
剑指offer_二叉树---二叉树的深度
67 0
剑指offer 55 二叉树的深度
DFS深度优先二叉树无非就那几个步骤
|
存储 算法 关系型数据库
重温算法之二叉树的锯齿形层序遍历
关于二叉树的题目其实是我的弱项,虽然二叉树不是很难理解,但是从学校开始接触二叉树开始就对它不是很感冒,所以很多时候都避开它,但是再难咬的骨头也的得啃,二叉树运用在很多程序的底层实现里,比如MySQL的索引实现就是B+树,我们懂得使用索引的同时也得知道,索引为什么这么快,而其快的原因就是底层里B+树得实现。
106 0
重温算法之二叉树的锯齿形层序遍历
|
存储 算法 Java
二叉树及二叉树遍历的基础解读
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点 。
150 0
二叉树及二叉树遍历的基础解读