最小公共祖先 IV

題目: 給定兩個節點,求它們在一個普通樹中的最小公共祖先。

思路: 採用廣度優先遍歷找到節點,將所有節點父節點存入哈希表,當找到節點時回溯哈希表實現到樹根的路徑。找兩條路徑的交點。

java代碼:

class TreeNode{
        int val;
        ArrayList<TreeNode> children;
    }
    TreeNode LCA4(TreeNode root,TreeNode p,TreeNode q){
        if(root==null||p=null||q==null)
            return null;
        Queue<TreeNode> currLevel=new LinkedList<TreeNode>();
        Queue<TreeNode> nextLevel=new LinkedList<TreeNode>();
        currLevel.offer(root);
        Queue<TreeNode> pp=new LinkedList<TreeNode>();
        Queue<TreeNode> qq=new LinkedList<TreeNode>();
        HashMap<TreeNode,TreeNode> backTracking=new HashMap<TreeNode,TreeNode>();
        while(!currLevel.isEmpty()){
            while(!currLevel.isEmpty()){
                nextLevel=new LinkedList<TreeNode>();
                TreeNode node=currLevel.poll();
                for(TreeNode child: node.children){
                    backTracking.put(child,node);
                    if(child==p){
                        addParent(pp,p,backTracking);
                    }else if(child==q){
                        addParent(qq,q,backTracking);
                    }
                    if(!pp.isEmpty()&&!qq.isEmpty()){
                        return getLCA(pp,qq);
                    }else{
                        nextLevel.offer(child);
                    }
                }
            }
            currLevel=nextLevel;
        }
        return null;
    }
    void addParent(Queue<TreeNode> Que,TreeNode q,HashMap<TreeNode,TreeNode> bt){
        TreeNode parent=bt.get(q);
        while(parent!=null){
            Que.addFirst(parent);
            parent=bt.get(parent);
        }
    }
    TreeNode getLCA(Queue<TreeNode> pp,Queue<TreeNode> qq){
        TreeNode result=null;
        while(!pp.isEmpty()&&!qq.isEmpty()){
            TreeNode pParent=pp.poll();
            TreeNode qParent=qq.poll();
            if(pParent==qParent){
                result=pParent;
            }else{
                break;
            }
        }
        return reault;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章