题解 | #在二叉树中找到两个节点的最近公共祖先#

在二叉树中找到两个节点的最近公共祖先

http://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116

此文仅用于记录

这题告诉我,二叉树能用节点本身解决的就不要引入什么第三方的数据结构了,比如什么数组的:
题解里一位大佬的代码:

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
        public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        return CommonAncestor(root, o1, o2).val; 
    }
    public TreeNode CommonAncestor (TreeNode root, int o1, int o2) {
        if (root == null || root.val == o1 || root.val == o2) { // 超过叶子节点,或者root为p、q中的一个直接返回
            return root;
        } 
        TreeNode left = CommonAncestor(root.left,o1,o2); // 返回左侧的p\q节点
        TreeNode right = CommonAncestor(root.right,o1,o2); // 返回右侧的p\q节点
        if (left == null) {  // 都在右侧
            return right;
        }
        if (right == null) { // 都在左侧
            return left;
        }
        return root; // 在左右两侧
    }
}

我的不通过代码,原因是遍历了不需要的节点,导致出现错误的父节点:

public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        // write code here
        //遍历了不需要的多余节点
        ArrayList<Integer> list1 = new ArrayList<>();
        ArrayList<Integer> list2 = new ArrayList<>();
        backTrack(root,o1,list1);
        backTrack(root,o2,list2);
        int result = list1.get(0);
        for(int i = 0;i < list1.size() && i < list2.size();i++){
            if(list1.get(i) == list2.get(i)){
                result = list1.get(i);
            }
        }
        System.out.println(list1 + "=-----------------="+list2);
        return result;
    }
    void backTrack(TreeNode root,int o,ArrayList<Integer> list){
        if(root.val != o){
            list.add(root.val);
        }
        else{
            return;
        }
        if(root.left != null){
            backTrack(root.left,o,list);
        }
        if(root.right != null){
            backTrack(root.right,o,list);
        }
    }
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务