• LeetCode Lowest Common Ancestor of a Binary Search Tree (LCA最近公共祖先)


    题意:

      给一棵二叉排序树,找p和q的LCA。

    思路:

      给的是BST(无相同节点),那么每个节点肯定大于左子树中的最大,小于右子树种的最小。根据这个特性,找LCA就简单多了。

      分三种情况:

      (1)p和q都在root左边,那么往root左子树递归。

      (2)在右同理。

      (3)一左一右的,那么root->val肯定大于其中的1个,小于另一个。

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {  //这是一棵排序树啊!
    13         if( (root->val - p->val ) * (root->val - q->val) <=0  )    //一大一小必会产生负的,或者root为其中1个,那么就是0
    14             return root;
    15         if( max(p->val, q->val) < root->val )              //都在左边
    16             return lowestCommonAncestor(root->left, p, q);
    17         else            //都在右边
    18             return lowestCommonAncestor(root->right, p, q);
    19     }
    20 };
    AC代码

    python3

      迭代

     1 class Solution(object):
     2     def lowestCommonAncestor(self, root, p, q):
     3         """
     4         :type root: TreeNode
     5         :type p: TreeNode
     6         :type q: TreeNode
     7         :rtype: TreeNode
     8         """
     9         while root:
    10             if (p.val-root.val)*(q.val-root.val)<=0:    #一左一右
    11                 return root
    12             elif p.val<root.val:    #
    13                 root=root.left
    14             else:
    15                 root=root.right    
    AC代码

       递归

     1 class Solution(object):
     2     def lowestCommonAncestor(self, root, p, q):
     3         """
     4         :type root: TreeNode
     5         :type p: TreeNode
     6         :type q: TreeNode
     7         :rtype: TreeNode
     8         """
     9         if (p.val-root.val)*(q.val-root.val)<=0:    #一左一右
    10             return root
    11         elif p.val<root.val:    #
    12             return self.lowestCommonAncestor(root.left, p, q)
    13         else:
    14             return self.lowestCommonAncestor(root.right, p, q)
    AC代码
  • 相关阅读:
    实验一、词法分析实验
    词法分析程序新
    词法分析程序
    我对编译原理的理解
    Unity3d数据存储 PlayerPrefs,XML,Json数据的存储与解析
    Unity3d网络总结(三) 封装Socket创建简单网络
    Unity3d网络总结(二)使用NetWorking代码搭建简单的网络模块
    Unity3d网络总结(一) NetWork组件使用
    Unity加载AB包
    unity编辑器拓展
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4638594.html
Copyright © 2020-2023  润新知