给一棵搜索二叉树,然后给出一个从跟到叶节点的最短的路径之和。
2016-09-19 21:36
253 查看
题目: 给一棵搜索二叉树,然后给出一个从跟到叶节点的最短的路径之和。
例如 5
3 8
2 6 11
0
那么输出就是5+3+2=10
思路,用动态规划的思想,其实就是普通的得到树的最小深度的变种。
代码如下:
[cpp] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
int GetMin(int a, int b)
{
return a < b ? a : b;
}
//得到搜索二叉树的最短路径
int GetMinSearchPath(BinaryTreeNode* pRoot)
{
if (pRoot == NULL)
return 0;
if (pRoot->left == NULL)
return GetMinSearchPath(pRoot->right) + pRoot->value;
if (pRoot->right == NULL)
return GetMinSearchPath(pRoot->left) + pRoot->value;
return GetMin(GetMinSearchPath(pRoot->left), GetMinSearchPath(pRoot->right)) + pRoot->value;
}
例如 5
3 8
2 6 11
0
那么输出就是5+3+2=10
思路,用动态规划的思想,其实就是普通的得到树的最小深度的变种。
代码如下:
[cpp] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
int GetMin(int a, int b)
{
return a < b ? a : b;
}
//得到搜索二叉树的最短路径
int GetMinSearchPath(BinaryTreeNode* pRoot)
{
if (pRoot == NULL)
return 0;
if (pRoot->left == NULL)
return GetMinSearchPath(pRoot->right) + pRoot->value;
if (pRoot->right == NULL)
return GetMinSearchPath(pRoot->left) + pRoot->value;
return GetMin(GetMinSearchPath(pRoot->left), GetMinSearchPath(pRoot->right)) + pRoot->value;
}
相关文章推荐
- 给定一颗二叉树,以及其中的两个node(地址均非空),要求给出这两个node的一个公共父节点,使得这个父节点与两个节点的路径之和最小。
- 给定一棵二叉树,找到它的最小深度。最小深度是从根节点到最近叶节点的最短路径上的节点数量
- 给定一棵二叉树,找到它的最小深度。最小深度是从根节点到最近叶节点的最短路径上的节点数量
- 数据结构复习之二叉树:遍历、搜索节点&路径、查找、与单链表互转、逐层打印
- Java代码 给出一个二叉树和一个数,判断该二叉树是否存在一个从根节点到叶节点的和与给出的数相同
- 面试题:判断一个节点是否在一棵二叉树中
- 判断一个节点是否在一棵二叉树中
- 二叉树--判断一个节点是否在一棵二叉树中。
- 二叉树两节点的最短路径(Homework2 of Advanced Network)
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- 二叉树中两节点之间最短路径
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 输入一个整数和一棵二元树。求出从根节点到叶节点的路径长度中与输入整数相等的所有路径。
- 给出一棵二叉树的根节点和其中两个不同的节点求出它们最近的公共祖先节点
- 【判断一个节点是否在一棵二叉树中】/【判断一颗二叉树是是否是另一颗树的子树】
- PHP 输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中