void postorderTraversal(TreeNode* root) { if (root) { postorderTraversal(root->left); postorderTraversal(root->right); cout << root->val << " "; } }将代码修改为二叉树用后序遍历搜索节点并输出路径
时间: 2023-06-20 13:06:47 浏览: 85
实现二叉树的先,中,后序遍历操作
可以按照以下方式修改代码来实现:
```
void postorderSearch(TreeNode* root, int target, vector<int>& path) {
if (root) {
if (root->val == target) {
path.push_back(root->val);
return;
}
postorderSearch(root->left, target, path);
postorderSearch(root->right, target, path);
if (!path.empty()) {
path.push_back(root->val);
}
}
}
void postorderTraversal(TreeNode* root, int target) {
vector<int> path;
postorderSearch(root, target, path);
if (path.empty()) {
cout << "The target node doesn't exist in the tree." << endl;
} else {
reverse(path.begin(), path.end());
for (int i = 0; i < path.size(); i++) {
cout << path[i] << " ";
}
}
}
```
其中,`postorderSearch` 函数用于在二叉树中搜索目标节点,并将搜索路径保存在 `path` 向量中。`postorderTraversal` 函数则调用 `postorderSearch` 来搜索目标节点并输出搜索路径。需要注意的是,由于后序遍历是先访问左子树和右子树,最后访问根节点,因此在 `postorderSearch` 中要先递归搜索左子树和右子树,最后再将根节点加入路径中。最终输出路径时,需要将保存的路径逆序输出,才能得到从根节点到目标节点的正确路径。
阅读全文