Lowest Common Ancestor of a Binary Search Tree

[Problem] 
https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/
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 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).”
Given binary search tree:  root = [6,2,8,0,4,7,9,null,null,3,5]
        _______6______
       /              \
    ___2__          ___8__
   /      \        /      \
   0      _4       7       9
         /  \
         3   5
Example 1:
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.
Example 2:
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.
Note:
  • All of the nodes' values will be unique.
  • p and q are different and both values will exist in the BST.
Chinese translation:
給你一個binary search tree,和其中的兩個點(並假設一定存於在樹中),請問他們的共同祖先中,最接近他們的是誰。

[Solution] 

Find the one who separate them.
It's a binary search tree, so p and q are placed according to their value.
When you try to find p and q from root, you will find the path are the same in the beginning.
And then the path separated at the node which q's value greater than node's value, and p's value smaller than node's value.
That node is their final common ancestor, and is also the lowest.

Let's write codes.

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        while(root)
        {
            if((p->val > root->val && q->val > root->val) ||
               (p->val < root->val && q->val < root->val))
            {
                root = p->val > root->val ? root->right : root->left;
            }
            else
                break;
        }
        return root;
    }
};