二叉树,返回节点的父节点

时间:2016-06-21 10:04:46

标签: c++ tree binary-tree

我尝试编写一个返回值节点父节点的函数.createAB函数有效,但我不知道迭代二叉树元素。如何递归调用?。请帮助我。

 ifstream f("store.txt");//store.txt:10 7 8 0 0 0 13 9 0 11 0 0 12 0 0
    struct elem {
        int inf;
        elem* st;
        elem* dr;
    };
    //this function create the binary tree
    void createAB(elem*& p) {
        int n;
        f >> n;
        if (n!=0) {
            p = new elem;
            p->inf = n;
            createAB(p->st);
            createAB(p->dr);
        }
        else 
            p = NULL;
    }
    `

        elem* parent(elem* rad, int n) {//my function,doesn't work
        if (rad == NULL)
            return NULL;
        else
            if (rad->st->inf == n || rad->dr->inf == n) 
                return rad;//return the element
            else {
                return parent(rad->st, n);//here is a problem
                return parent(rad->dr, n);
            }
    }
      10
   7       13
 8       9    12
           11
node 12 => parent 13
node 8 => parent 7

2 个答案:

答案 0 :(得分:0)

在使用rad->strad->dr之前,您应该检查rad->st->infrad->dr->inf是否为空。

答案 1 :(得分:0)

正如sebi519所指出,您需要检查rad->strad->dr是否不是NULL

但正如你正确地评论了这里的主要问题是在return语句中。问题是第二行永远不会执行,因为第一行已经从函数返回。

return parent(rad->st, n);//This returns and the next line is not executed
return parent(rad->dr, n);

你需要保存第一个电话的结果并检查它是否成功,如果没有,则进行第二次通话:

elem* result = parent(rad->st,n);
if (result != NULL)
  return result;
else
  return parent(rad->dr,n);

完全纠正功能:

elem* parent(elem* rad, int n) {
  if (rad == NULL)
    return NULL;
  else
    if ( (rad->st!=NULL && rad->st->inf == n) || (rad->dr!=NULL) && (rad->dr->inf == n)){
      return rad;//return the element
    }
    else {
      elem* result= parent(rad->st, n);
      if (result!=NULL){
        return result;
      }
      else{
        return parent(rad->dr, n);
      }
    }
}