二叉树中如何求任一节点的路径呢?
思路
使用先序遍历,处理的时候让节点入栈,并且加上标志位即可。
使用另外的result保存最终的路径。
函数
void pre_order(TreeNode * node,TreeNode *search,vector<TreeNode*> &path, vector<TreeNode*> &result,//返回路径结果
int &finish)//判断是否找到
核心代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
void pre_order(TreeNode * node,//正在遍历的节点
TreeNode *search,//搜索的节点
vector<TreeNode*> &path, //节点路径的栈(用vector实现)
vector<TreeNode*> &result,//返回路径结果
int &finish)//记录是否找到节点search,找到是1,未找到是0
{
if(!node||finish==1)//为空或者找到则返回
return;
path.push_back(node);//保存节点数值
if(node==search)
{
finish=1;
result=path;//找到则节点路径保存
}
pre_order(node->left,search,path,result,finish);
pre_order(node->right,search,path,result,finish);
path.pop_back();//结束遍历node时,node节点弹出path栈
}
代码应用
下面是应用:Leetcode236最近公共祖先题解
读者可以利用本文中的方法来解决这道题,以此来夯实自己的代码基础,提高编程能力。
希望对你有帮助。