转自https://blog.csdn.net/innovate1989/article/details/73350400
参考liuyi1207164339帖子和ethannnli的帖子的基础上搞定了这个问题。刚开始头真的大了,感觉有点超出能力范围了。分析了他们的思路,求解这个二叉树中两节点的最短路径这个问题可以分解为三个子问题:1.求出二叉树中两个节点p和q的最小公共祖先 2.分别求出最小公共祖先节点到p和q的路径 3.归并求出的两条路径
问题1求解可以参考:https://segmentfault.com/a/1190000003509399,ethannnli 采用了二分法和深度搜索两种方法求解。
问题2求解可以参考:http://blog.csdn.net/liuyi1207164339/article/details/50916687,采用深度搜索求出lca到p或者q的路径。
问题3求解比较简单,我是直接通过对前两步返回的字符串进行后处理。
以如下二叉树作为测试二叉树:
public class FindShortestPath {
//查找指定节点的标记
boolean bLeafIsFound = false;
String path1;
public String findPath(TreeNode root, Stack path, TreeNode nodeToFind){
if (root == null) {
return null;
}
//将路径节点添加到栈中
path.push(root.val);
//如果到达了子节点
if (!bLeafIsFound &