就这,写个递归差点把自己写傻了。
一、递归实现
思想:借助栈结构来保存路径上的结点,首先从根结点开始,一直往左找,如果左边找到就返回true;否则,如果左边找不到并且右子树不为空的情况下再继续往右子树找。如果左右子树都找不到,就弹出栈顶结点并返回false。方法运行完毕后,栈中保存的元素就是一条从根到给定结点的路径。
public static boolean searchNode(TreeNode root,Stack<TreeNode> s,TreeNode node) {
if(root == null) return false;
s.push(root);
if(root.val == node.val) return true;
boolean b = false;
//先去左子树找
if(root.left != null) b = searchNode(root.left,s,node);
//左子树找不到并且右子树不为空的情况下才去找
if(!b && root.right != null) b = searchNode(root.right,s,node);
//左右都找不到,弹出栈顶元素
if(!b) s.pop();
return b;
}
二、非递归实现:
https://www.cnblogs.com/neuzk/p/9486730.html