更改二叉树中每个节点的信息部分

时间:2013-05-06 10:39:38

标签: data-structures

我有一棵二叉树。

         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;
  }
} 

以这种方式我无法修改右手叶节点的节点。

有人可以提供正确的解决方案.. ???

提前致谢

1 个答案:

答案 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);
  }
}