如何递归访问所有树节点

时间:2013-03-03 01:41:16

标签: c++ binary-tree

所以,我有一棵这样的树

                        a
                       /  \
                      b     c
                     / \   /
                    d   e  f

该功能必须打印:

a
ab
abd
abe
ac
acf

我的老师说我可以拥有的唯一参数是指向第一个节点的指针。我不能使用任何其他变量,包括静态和全局变量。

void print(Node* a)
{
  if(a==NULL){return;}
  cout<<a->data;
  if(a->left!=NULL){print(a->left);}
  if(a->right!=NULL){print(a-right);}
}

到目前为止,我的程序只能打印“abdecf”。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以将父项添加到表示节点的结构中。像这样 -

class Node {
public:
  char data;
  Node *left;
  Node *right;
  Node *parent;
};

现在使用这个修改过的数据结构,您将在每个级别打印从当前节点到根的路径,如此 -

void print(Node* a)
{
  Node *cur = a;
  do {
    cout << cur->data << ", ";
    cur = cur->parent;
  } while(cur != NULL);
  if(a->left != NULL){
    print(a->left);
  }
  if(a->right != NULL){
    print(a->right);
  }
}