C++二叉树如何遍历并输出结点T的所有兄弟姐妹
时间: 2024-03-02 16:50:07 浏览: 148
遍历二叉树并输出结点T的所有兄弟姐妹,可以按照以下步骤实现:
1. 遍历二叉树,找到结点T所在的节点P。
2. 如果节点P是根节点,则没有兄弟姐妹,直接返回。
3. 如果节点P是其父节点的左子节点,则遍历其父节点的右子树,输出所有的节点。
4. 如果节点P是其父节点的右子节点,则遍历其父节点的左子树,输出所有的节点。
以下是C++代码实现:
```c++
void printSibling(TreeNode* root, TreeNode* T) {
if (!root || !T || root == T) return;
TreeNode* parent = nullptr;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* node = q.front();
q.pop();
if (node->left) {
q.push(node->left);
if (node->left == T) {
parent = node;
}
}
if (node->right) {
q.push(node->right);
if (node->right == T) {
parent = node;
}
}
}
if (parent) {
if (parent->left == T) {
TreeNode* sibling = parent->right;
while (sibling) {
cout << sibling->val << " ";
sibling = sibling->right;
}
} else {
TreeNode* sibling = parent->left;
while (sibling) {
cout << sibling->val << " ";
sibling = sibling->left;
}
}
return;
}
}
}
```
其中,TreeNode表示二叉树的节点结构体,包含val、left、right三个成员变量。函数printSibling的输入参数为二叉树的根节点root和要输出兄弟姐妹的节点T。函数中使用队列实现层次遍历,并通过parent指针记录节点T的父节点,最后根据节点T是父节点的左子节点还是右子节点,遍历输出兄弟姐妹节点的值。
阅读全文