Merge pull request #936 from zhicheng-lee/master

Update 0236.二叉树的最近公共祖先.md
This commit is contained in:
程序员Carl
2021-12-12 14:22:49 +08:00
committed by GitHub
2 changed files with 17 additions and 32 deletions

View File

@ -221,42 +221,30 @@ public:
## Java
```Java
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
return lowestCommonAncestor1(root, p, q);
}
public TreeNode lowestCommonAncestor1(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root == p || root == q) {
if (root == null || root == p || root == q) { // 递归结束条件
return root;
}
TreeNode left = lowestCommonAncestor1(root.left, p, q);
TreeNode right = lowestCommonAncestor1(root.right, p, q);
if (left != null && right != null) {// 左右子树分别找到了说明此时的root就是要求的结果
return root;
}
if (left == null) {
return right;
}
return left;
}
}
```
```java
// 代码精简版
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root.val == p.val ||root.val == q.val) return root;
// 后序遍历
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if (left != null && right != null) return root;
else if (left == null && right != null) return right;
else if (left != null && right == null) return left;
else return null;
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;
}
}
}
```
## Python

View File

@ -236,16 +236,13 @@ class Solution {
```java
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
return buildTree(root, val);
}
public TreeNode buildTree(TreeNode root, int val){
if (root == null) // 如果当前节点为空也就意味着val找到了合适的位置此时创建节点直接返回。
return new TreeNode(val);
if (root.val < val){
root.right = buildTree(root.right, val); // 递归创建右子树
root.right = insertIntoBST(root.right, val); // 递归创建右子树
}else if (root.val > val){
root.left = buildTree(root.left, val); // 递归创建左子树
root.left = insertIntoBST(root.left, val); // 递归创建左子树
}
return root;
}