Leetcode235/236之树最近公共祖先以及递归中带TreeNode
树最近公共祖先以及递归中带TreeNode
- 但递归时返回TreeNode要想清楚最后一步返回到哪
Leetcode236-二叉树的最近公共祖先
- 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
- 输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
- 输出:3
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root == p || root == q) { // 递归结束条件
return root;
}
// 后序遍历
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if(left == null && right == null) { // 若未找到节点 p 或 q
return null;
}else if(left == null && right != null) { // 若找到一个节点
return right;
}else if(left != null && right == null) { // 若找到一个节点
return left;
}else { // 若找到两个节点
return root;
}
}
Leetcode235-二叉搜索树的最近公共祖先
- 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先
- 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
- 输出: 6
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root.val>p.val && root.val>q.val){
TreeNode leftNode=lowestCommonAncestor(root.left,p,q);
return leftNode;
}
if(root.val<p.val && root.val<q.val){
TreeNode rightNode=lowestCommonAncestor(root.right,p,q);
return rightNode;
}
return root;
}

浙公网安备 33010602011771号