九度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
- 九度oj 题目1350:二叉树的深度
- 九度OJ-题目1350:二叉树的深度
- 【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ
- 九度OJ - 1350 - 二叉树的深度
- 题目1350:二叉树的深度-九度
- 九度 题目1350:二叉树的深度
- 九度 题目1350:二叉树的深度
- 九度Oj题目1113:二叉树
- 九度OJ题目1113:二叉树
- 题目1113:二叉树 九度OJ
- 九度OJ 1350:二叉树的深度 (二叉树)
- 九度OJ-题目1521:二叉树的镜像
- 九度oj 题目1078:二叉树遍历
- 九度OJ-剑指offer-题目1385:重建二叉树
- 九度OJ-题目1009:二叉搜索树
- 九度oj 题目1009:二叉搜索树
- 九度OJ-题目1385:重建二叉树
- 九度oj 二叉树遍历 题目1184
- 嵌入式 Linux线程同步读写锁rwlock示例
- 搜狗输入法在输入框内无法正常使用
- 日经社説 20150611 海外買収のつまずきから学ぶ
- 黑马程序员--If-else和switch语句
- Eclipse常用插件在线安装和离线安装方式
- 九度OJ-题目1350:二叉树的深度
- 学习nodejs——callback, async i/o
- xloadtree实现web动态目录树(分层加载)
- 15个SAT数学高分公式介绍
- Python正则表达式
- 一篇读懂CSS布局模型
- Hangover
- windows下python画图matplotlib
- mysql ERROR 1025 (HY000): Error on rename of