二叉树的最大深度和最小深度实现
来源:互联网 发布:男神的偶像知乎 编辑:程序博客网 时间:2024/05/19 14:35
二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的距离。
如果二叉树为空,则深度为0
如果不为空,分别求左子树的深度和右子树的深度,取最大的再加1.
二叉树的最小深度
给定一个二叉树,找出其最小深度。
二叉树的最小深度为根节点到最近叶子节点的距离。
判断左子树或右子树是否为空,若左子树为空,则返回右子树的深度,反之返回左子树的深度,如果都不为空,则返回左子树和右子树深度的最小值。
代码实现:
#include <iostream>#include <vector>#include <list>using namespace std;class TreeNode{ public: int val; TreeNode *left, *right; TreeNode(int m_val):val(m_val), left(NULL), right(NULL){ } TreeNode* createTree(vector<int> list, int start); };TreeNode* TreeNode::createTree(vector<int> list, int start){ if(list[start] == '#') { return NULL; } TreeNode *root = new TreeNode(list[start]); int lnode = 2*start + 1; int rnode = 2*start + 2; if(lnode > list.size() - 1) { root->left = NULL; } else { root->left = createTree(list, lnode); } if(rnode > list.size()- 1) { root->right = NULL; } else { root->right = createTree(list, rnode); } return root;}class Solution{ public: int MinDepth(TreeNode *root){ if(root == NULL){ return 0; } if(root->left == NULL){ return MinDepth(root->right) + 1; } if(root->right == NULL){ return MinDepth(root->left) + 1; } int leftDepth = MinDepth(root->left) + 1; int rightDepth = MinDepth(root->right) + 1; return leftDepth < rightDepth ? leftDepth : rightDepth; } int MaxDepth(TreeNode *root){ if(root == NULL){ return 0; } int leftDepth = MaxDepth(root->left) + 1; int rightDepth = MaxDepth(root->right) + 1; return leftDepth > rightDepth ? leftDepth : rightDepth; }};int main(){ Solution s; vector<int> datanum; datanum.push_back(1); datanum.push_back(2); datanum.push_back(3); datanum.push_back(4); datanum.push_back(5); datanum.push_back('#'); datanum.push_back(6); datanum.push_back('#'); datanum.push_back('#'); datanum.push_back(7); datanum.push_back(8); TreeNode *tree, *root; root = tree->createTree(datanum, 0); cout << s.MinDepth(root) << endl; cout << s.MaxDepth(root) << endl; system("pause"); return 0; }
阅读全文
0 0
- 二叉树的最大深度和最小深度实现
- 二叉树最大深度和最小深度
- 二叉树最大深度和最小深度
- 二叉树的最大深度和最小深度
- 二叉树的最大深度 & 二叉树的最小深度
- 二叉树的最大深度 & 二叉树的最小深度
- 二叉树深度(最大和最小)
- 二叉树的最大最小深度
- 二叉树最大 最小深度
- 二叉树 最大最小深度
- 二叉树的最大深度与最小深度
- 二叉树的最大深度与最小深度
- leedcode二叉树的最小深度与最大深度
- 二叉树的最大深度与最小深度
- 求二叉树的最大深度和最小深度以及之间的差
- 二叉树(创建、遍历、树的最大深度和最小深度)
- 二叉树的最大深度和宽度
- python_lintcode_97二叉树的最大深度 _155二叉树的最小深度
- poj 1383 Labyrinth【bfs+队列】
- 动态规划中级教程 322. Coin Change
- 如何把footer固定到页面最下端?
- fdfs防盗链配置及java开发
- [数据结构] 排序算法小结
- 二叉树的最大深度和最小深度实现
- 4.1.1—栈—Valid Parentheses
- php用curl获取sessionid
- HDU4704Sum 费马小定理+大数取模
- Class……not found (ONETHINK框架)
- PAT 乙级 1019.数字黑洞(20)
- 4.1.2—栈—Longest Valid Parentheses
- android audio volume
- SpringMVC4.3x教程之八异常的三种处理方式