每个叶子节点的所有祖先c++
时间: 2024-03-24 15:39:49 浏览: 5
树的基本概念-数据结构二叉树c++版
以下是求一个二叉树每个叶子节点的所有祖先的C++代码:
```c++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void printAllLeafAncestors(TreeNode* root) {
if (root == nullptr) {
return;
}
if (root->left == nullptr && root->right == nullptr) {
cout << "Ancestors of leaf " << root->val << " : ";
printAncestors(root, root->val);
cout << endl;
}
printAllLeafAncestors(root->left);
printAllLeafAncestors(root->right);
}
bool printAncestors(TreeNode* root, int target) {
if (root == nullptr) {
return false;
}
if (root->val == target) {
return true;
}
if (printAncestors(root->left, target) || printAncestors(root->right, target)) {
cout << root->val << " ";
return true;
}
return false;
}
```
其中,`root`是二叉树的根节点。函数`printAllLeafAncestors`通过递归遍历整个二叉树,对于每个叶子节点,调用`printAncestors`函数输出其所有祖先。最终输出每个叶子节点的所有祖先。函数`printAncestors`的实现参考上一个问题的回答。
阅读全文