将所有节点放在堆栈中从根节点到目标节点的路径中

时间:2014-08-30 04:44:36

标签: algorithm tree binary-tree

如果是从根节点到目标节点的路径,我需要将所有节点推送到目标节点。例如我的树

          20
       8     22
    4     12
 2     1

我的根节点是20,我的目标节点是4.所以,堆栈应该包含20,8和4.我尝试提出算法,但所有这些都失败了。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

您可以在此处使用递归。伪代码如下:

bool found_target( node *root )
{
   if ( root->val == target || found_target( root->left ) || found_target( root->left ) )
   {
      push( root, stack);
      return true;
   }
   return false;
}

答案 1 :(得分:0)

我想出了以下解决方案。它将打印正确的解决方案,但唯一的问题是它将遍历整个树。

vector<int> store;

void createStore(node* root,node* target){   if(root==NULL)
                    return;
            else{
                    store.push_back(root);
                    createStore(root->left,target);
                    createStore(root->right,target);
            }
            if(store[store.size()-1]==target)
                    return;
            else{
                    cout<<store[store.size()-1]->data<<endl;
                    store.pop_back();
            }

答案 2 :(得分:-1)

首先找到目标节点。然后遍历指向父节点的指针,直到到达根节点。在遍历每个链接时,将节点的值压入堆栈。