• [LeetCode] Lowest Common Ancestor of a Binary Search Tree


    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

    According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

            _______6______
           /              
        ___2__          ___8__
       /              /      
       0      _4       7       9
             /  
             3   5
    

    For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

    做这道题,首先得了解二叉排序树的性质,然后就是利用队列去记录寻找到q或者p的路径,然后对路径进行遍历,找到分叉点,这个分叉点就是要找的点。

        public void findPath(TreeNode root, TreeNode p,Queue<TreeNode> queue)
        {
            TreeNode temp=root;
            while(temp!=null && temp.val!=p.val)
            {
                queue.offer(temp);
                if(temp.val>p.val) temp=temp.left;
                else temp=temp.right;
            }
            queue.add(p);
        }
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            Queue<TreeNode> pQ=new LinkedList<TreeNode>();
            Queue<TreeNode> qQ=new LinkedList<TreeNode>();
            findPath(root, p, pQ);
            findPath(root, q, qQ);
            TreeNode x1=null;
            TreeNode x2=null;
            TreeNode anc=null;
            while(!pQ.isEmpty() && !qQ.isEmpty())
            {
                x1=pQ.poll();
                x2=qQ.poll();
                if(x1.val==x2.val)
                {
                    anc=x1;
                }
                else
                {
                    break;
                }
            }
            return anc;
        }

     

  • 相关阅读:
    css文字和背景色渐变色
    雪碧图定位
    js操作链接url
    93服务器上获取json数据
    this的区别
    绩效项目总结
    【ASP.NET MVC 学习笔记】- 05 依赖注入工具Ninject
    【ASP.NET MVC 学习笔记】- 04 依赖注入(DI)
    【ASP.NET MVC 学习笔记】- 03 Razor语法
    【ASP.NET MVC 学习笔记】- 02 Attribute
  • 原文地址:https://www.cnblogs.com/maydow/p/4640941.html
Copyright © 2020-2023  润新知