赞
踩
Given a binary search tree (BST), find the lowest common ancestor (LCA) node of two given nodes in the BST.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
Output: 6
Explanation: The LCA of nodes 2 and 8 is 6.
Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
Output: 2
Explanation: The LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.
Input: root = [2,1], p = 2, q = 1
Output: 2
From: LeetCode
Link: 233. Number of Digit One
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) { while (root != NULL) { // If both p and q are greater than root, LCA lies in the right subtree if (p->val > root->val && q->val > root->val) { root = root->right; } // If both p and q are smaller than root, LCA lies in the left subtree else if (p->val < root->val && q->val < root->val) { root = root->left; } // We have found the split point, i.e. the LCA node else { return root; } } return NULL; // this line will never be reached if p and q are guaranteed to be in the tree }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。