如何在二叉树中得到最大路径代价
how to get the max path cost in binary tree
如何在二叉树中获得最大路径代价,并打印包含所有路径数据元素的矢量?
我知道如何得到成本,但不知道如何得到元素向量有什么帮助吗?
struct Node
{
int data;
Node* left;
Node* right;
};
int treeMaxPath(Node* root) {
if (root== NULL)
return 0;
else
return root->data + max(treeMaxPath(root->left), treeMaxPath(root->right));
}
- 自下而上处理树,存储
data += max subtrees
- 从顶部开始,打印现在为
(data - max subtrees)
的值,然后打印最大子项 - 自上而下恢复数据值,
data -= max subtrees
注:
这是O(N)的时间复杂度,对于内存是O(1)。可以在不修改数据的情况下通过向Node
添加新变量将其更改为存储max。可以很容易地修改它以打印树中的所有最大路径。
int maxChild(const Node *root) {
return max(root->left ? root->left.data : 0,
root->right ? root->right.data : 0);
}
void treeBottomUp(Node* root) {
if (root) {
treeBottomUp(root->left);
treeBottomUp(root->right);
root->data += maxChild(root);
}
}
void treeRestore(Node *root) {
if (root) {
root->data -= maxChild(root);
treeRestore(root->left);
treeRestore(root->right);
}
}
void printMaxPath(const Node* root) {
if (root) {
printf("%dn", root->data - maxChild(root));
if (root->left && root->left.data >= maxChild(root)) {
printMaxPath(root->left);
} else {
printMaxPath(root->right);
}
}
}
要做到这一切:
void solveTree(Node *root) {
treeBottomUp(root);
printMaxPath(root);
treeRestore(root);
}
返回成本和路径的pair
。该路径可以存储在vector<Node*>
中。
完成对整棵树的treeMaxPath
调用后(如果在根上调用递归调用,则应完成对整颗树的递归调用),将使用其深度值更新整棵树。
现在,您可以通过一个简单的循环轻松地进行小型跟踪,从树根沿着最高深度值遍历,直到满足NULL子值。
p.s.我不确定您对treeMaxPath
的实现是否正确。如果存储在某个节点上的数据是深度数据,则应该更改算法的某些部分。
相关文章:
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- C++A*算法并不总是在路径中具有目标节点
- 从函数角度看ID到文件路径的内部与外部映射
- boost xml parsingl将xml的路径作为变量发送
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如何使用cppcheck处理半相对包含路径
- 在C++中设置基于操作系统的文件路径
- 基于编译器选项的编译二进制路径
- 按边长度递归搜索图中所有可行路径
- 使用变量值作为 PlaySound 中的路径
- 如何转换真实路径 CString c++
- 从 GUID 获取 USB 卷路径
- 查找 GCD:并非所有控制路径都返回值
- C++17 文件系统::remove_all 带有通配符路径
- 在带有尾部斜杠的路径上返回 std::filesystem::create_directories() 的值
- 获取当前正在运行的 exe 名称(不是路径)
- 如何从 Skia 路径几何体中获取网格?
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)