我有一棵二叉树。
2
/ \
3 4
/ \ \
5 1 8
\ /
6 9
我想更改每个节点的信息部分,以便
nodeinfo = nodeinfo + nextInorderNodeInfo
所以实际的inorder遍历
5, 6, 3, 1, 2, 4, 9, 8
将更改为
5+6,6+3,3+1,1+2,2+4,4+9,9+8,8+0
11, 9, 4, 3, 6, 13, 17, 8
我需要编写一个函数来修改每个节点的二叉树信息部分。
我做了以下
致电
change(root,NULL);
功能定义
void change(node* n, node *k)
{
if (n)
{
if (n->left) change(n->left,n);
if (n->right) change(n,n->right);
n->info + = k->info;
}
}
以这种方式我无法修改右手叶节点的节点。
有人可以提供正确的解决方案.. ???
提前致谢
答案 0 :(得分:1)
写一个反向按顺序遍历函数(如right, this, left
而不是left, this, right
)(技术上仍然按顺序,只是使用不同的定义,但是除了这一点之外。
因此,此函数将按此顺序处理节点:
8, 9, 4, 2, 1, 3, 6, 5
此函数还必须记住最后处理的节点的值(在添加到它之前)并简单地将此值添加到当前节点。
这里甚至还有一些应该工作的代码:
int last = 0;
void change(node* n)
{
if (n)
{
change(n->right);
int tempLast = n->info;
n->info += last;
last = tempLast;
change(n->left);
}
}