
二叉树的这种题经常可以用递归的思想来解决。我不管你是怎么遍历的,我只需要明确我的递归函数的作用是什么,千万不要跳到递归函数中去用你的人脑压栈。 比如说找最近公共祖先这道题,算法的框架是这样的,我就让递归函数TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)的作用是从当前根节点向下搜索 p、q是否存在于当前节点的左右子树中,找到就返回相应的节点
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null || p == root || q == root) {return root;}//TreeNode leftNode = lowestCommonAncestor(root.left, p, q);TreeNode rightNode = lowestCommonAncestor(root.right, p, q);if (leftNode != null && rightNode != null) {return root;}return leftNode == null ? rightNode : leftNode;}
