如果是从根节点到目标节点的路径,我需要将所有节点推送到目标节点。例如我的树
20
8 22
4 12
2 1
我的根节点是20,我的目标节点是4.所以,堆栈应该包含20,8和4.我尝试提出算法,但所有这些都失败了。有什么建议吗?
答案 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)
首先找到目标节点。然后遍历指向父节点的指针,直到到达根节点。在遍历每个链接时,将节点的值压入堆栈。