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


    Well, remember to take advantage of the property of binary search trees, which is, node -> left -> val < node -> val < node -> right -> val. Moreover, both p and q will be the descendants of the root of the subtree that contains both of them. And the root with the largest depth is just the lowest common ancestor. This idea can be turned into the following simple recursive code.

     1 class Solution {
     2 public:
     3     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
     4         if (p -> val < root -> val && q -> val < root -> val)
     5             return lowestCommonAncestor(root -> left, p, q);
     6         if (p -> val > root -> val && q -> val > root -> val)
     7             return lowestCommonAncestor(root -> right, p, q);
     8         return root;
     9     }
    10 };

    Of course, we may also solve it iteratively.

     1 class Solution {
     2 public:
     3     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
     4         TreeNode* cur = root;
     5         while (true) {
     6             if (p -> val < cur -> val && q -> val < cur -> val)
     7                 cur = cur -> left;
     8             else if (p -> val > cur -> val && q -> val > cur -> val)
     9                 cur = cur -> right;
    10             else return cur;
    11         }
    12     }
    13 };
  • 相关阅读:
    图片切换的练习
    固定定位
    绝对定位
    相对定位
    全局作用域 变量声明
    3种循环语句 JS基础
    解除绑定事件 和 封装兼容性addEvent 来处理针对于不同浏览器的兼容方法
    插入排序法 猴子选大王 检索的数组 验证身份证号码 练习
    [z]JSONP例子
    ireport related
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4638519.html
Copyright © 2020-2023  润新知