九度OJ-题目1350:二叉树的深度

来源:互联网 发布:网络还能买彩票吗 编辑:程序博客网 时间:2024/05/18 13:06

题目链接地址:

九度OJ-题目1350:二叉树的深度


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

输入:
第一行输入有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


解题思路:

二叉树是一种递归的数据结构,也就是说如果某个结点存在子树,那么该子树也是二叉树。二叉树的深度定义是:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
因此获取到根结点的左右子树的深度,取二者的较大值加1就是该二叉树的深度,而通过递归就可以求出根结点的左右子树的深度。
AC代码如下:

#include<stdio.h>#define MAX 11 typedef struct Node{   bool isRoot;           // 标记结点是否为根结点   Node * lChild;         // 左孩子   Node * rChild;         // 右孩子}BinaryTreeNode; BinaryTreeNode binaryTreeNode[MAX]; /*** 初始化二叉树中的结点,将每个结点都看成是一棵只含有根结点,无孩子结点的二叉树* @param n  二叉树的结点数目* @return void*/void initBinaryTree(int n){  int i;  for(i = 1;i <= n;i++)  {      binaryTreeNode[i].isRoot = true;      binaryTreeNode[i].lChild = NULL;      binaryTreeNode[i].rChild = NULL;  }} /*** 构造有n个结点的二叉树* @param n  二叉树的结点个数* @return root  返回二叉树的根结点*/BinaryTreeNode * createBinaryTree(int n){  BinaryTreeNode * root = NULL;  int i;  int leftChild,rightChild;  initBinaryTree(MAX);  // 构造各个二叉树结点的左右孩子,结点编号从1开始  for(i = 1;i <= n;i++)  {     scanf("%d%d",&leftChild,&rightChild);     if(leftChild != -1)     {         binaryTreeNode[i].lChild = &binaryTreeNode[leftChild];         binaryTreeNode[leftChild].isRoot = false;     }     if(rightChild != -1)     {         binaryTreeNode[i].rChild = &binaryTreeNode[rightChild];         binaryTreeNode[rightChild].isRoot = false;     }  }  // 找到二叉树的根结点  for(i = 1;i <= n;i++)  {      if(true == binaryTreeNode[i].isRoot)      {         root = &binaryTreeNode[i];         break;      }  }  return root;} /*** 获取二叉树的高度* @param root  二叉树的根结点* @return h  返回二叉树的高度*/int getBinaryTreeHeight(BinaryTreeNode * root){  int hl,hr,h;  if(NULL == root)     return 0;  else               // 通过递归获取左右子树的高度,取二者的较大值加1做为二叉树的高度  {     hl = getBinaryTreeHeight(root -> lChild) + 1;     hr = getBinaryTreeHeight(root -> rChild) + 1;     h = hl > hr ? hl : hr;     return h;  }} int main(){    int n;    int biTreeHeight;    BinaryTreeNode * root;    scanf("%d",&n);    root = createBinaryTree(n);    biTreeHeight = getBinaryTreeHeight(root);    printf("%d\n",biTreeHeight);    return 0;} /**************************************************************    Problem: 1350    User: blueshell    Language: C++    Result: Accepted    Time:0 ms    Memory:1020 kb****************************************************************/

0 0