[英]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("%d\n", 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子级。
ps我不确定您对treeMaxPath
的实现是否正确。 如果您存储在某个节点上的数据是深度数据,则应更改算法的某些部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.