二叉树结点位置对调的问题
一个二叉树, 普普通通的二叉树, 结点是这样定义的:
typedef struct node_t {
struct node_t* parent;
struct node_t* left;
struct node_t* right;
int data;
} node;
再简单不过了, 现在递归创建一个二叉树. 假设现在的二叉树是左边这样的, 对调之后是右边这样的.
1 1
/ \ / \
/ \ / \
2 3 8 3
/ \ / / \ /
4 5 6 ----> 4 5 6
/ \ / \
9 8 9 2
/ /
0 0
要求一个函数 void swap(node* a, node* b)
, swap不能直接对调data:
// two和eight是内定的, 不要在意这些细节
printf("%d %d %d\n", two->data,
eight->data,
eight->right); // 2 8 0
swap(two, eight);
printf("%d %d %d\n", two->data,
eight->data,
eight->right->data); // 2 8 5
求一个, 多种/好的解法, 算法小白真心求教...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
下面的代码是错的, 没有考虑a, b的parent,child节点的指针. 有时间再改把
先交换, 再事后处理异常情况 也是一条思路.
检查a,b的left, right, 如果指向了自身, 则知a,b相邻. 把指针重新指向另一个节点即可
.