计算二叉树的深度
2015-03-23 22:12
162 查看
需求:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
分析:
/*
* 思路1:算出所有路径的深度,然后找出最长的路径,即为深度; (这种方法代码量比较大)
* 思路2:递归思想,如果左右子树都为空,则深度为1;如果左右子树都不为空,则深度为左右子树最大值加1
* 如果左子树为空,则深度为右子树深度加1,如果右子树为空,则深度为左子树深度加1;
* */
代码实现:
测试case:
考点总结:
递归思想
知识迁移能力:题目是做不完的,要去分析解题的思路,然后将这些思路应用到其他的场景;
参考文献:
http://zhedahht.blog.163.com/blog/static/25411174200732975328975/
分析:
/*
* 思路1:算出所有路径的深度,然后找出最长的路径,即为深度; (这种方法代码量比较大)
* 思路2:递归思想,如果左右子树都为空,则深度为1;如果左右子树都不为空,则深度为左右子树最大值加1
* 如果左子树为空,则深度为右子树深度加1,如果右子树为空,则深度为左子树深度加1;
* */
代码实现:
int depth_of_binary_tree(t_binarytree_node *p_root) { if (p_root == NULL) return 0; int left = depth_of_binary_tree(p_root->left); int right = depth_of_binary_tree(p_root->right); return 1 + (left > right ? left : right); }
测试case:
/* 功能测试1 */ int preorder[] = {1,2,4,7,3,5,6,8}; int inorder[] = {4,7,2,1,5,3,8,6}; t_binarytree_node *p_root = NULL; p_root = build_binarytree(preorder, inorder, sizeof(preorder)/sizeof(int)); print_binarytree_by_preorder(p_root); cout << "The depth of binary tree is " << depth_of_binary_tree(p_root) << endl; /* 异常测试 */ cout << "The depth of binary tree is " << depth_of_binary_tree(NULL) << endl; /* 边界测试1 */ int preorder2[] = {1}; int inorder2[] = {1}; t_binarytree_node *p_root2 = NULL; p_root2 = build_binarytree(preorder2, inorder2, sizeof(preorder2)/sizeof(int)); print_binarytree_by_preorder(p_root2); cout << "The depth of binary tree is " << depth_of_binary_tree(p_root2) << endl; /* 边界测试2 */ int preorder3[] = {1,2,4,7}; int inorder3[] = {4,7,2,1}; t_binarytree_node *p_root3 = NULL; p_root3 = build_binarytree(preorder3, inorder3, sizeof(preorder3)/sizeof(int)); print_binarytree_by_preorder(p_root3); cout << "The depth of binary tree is " << depth_of_binary_tree(p_root3) << endl;
考点总结:
递归思想
知识迁移能力:题目是做不完的,要去分析解题的思路,然后将这些思路应用到其他的场景;
参考文献:
http://zhedahht.blog.163.com/blog/static/25411174200732975328975/
相关文章推荐
- 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
- 计算二叉树的最小深度。最小深度定义为从root到叶子节点的最小路径。
- 数据结构与算法 -- 二叉树链式详解((非)/递归遍历,叶子个数,深度计算)
- 二叉树的遍历与深度和节点数的计算代码实现
- 计算二叉树的深度,结点的个数。
- 面试题16:递归计算二叉树的最大、最小深度
- 计算二叉树的深度,判断二叉树是否是平衡二叉树
- 计算一个二叉树的深度
- 基本数据结构——二叉树的建立,遍历,求叶子节点,深度计算
- 笔试算法题(16):二叉树深度计算 & 字符串全排列
- 【二叉树】计算二叉树深度【104. Maximum Depth of Binary Tree】【111. Minimum Depth of Binary Tree】
- Java实现二叉树的深度计算
- Java代码分别用递归和非递归方式计算二叉树的最大深度
- 计算二叉树的深度和宽度
- 二叉树创建、销毁、按照分层在控制台显示、计算二叉树深度等等
- 111. Minimum Depth of Binary Tree (计算二叉树最小深度)
- 与二叉树有关的一些操作:先序,中序,后序,层次遍历,计算深度,叶结点数
- 计算二叉树的深度+判断二叉树是否是平衡二叉树
- 二叉树深度计算
- 计算二叉树的深度