zoukankan      html  css  js  c++  java
  • [LintCode] 915. Inorder Predecessor in BST

    Given a binary search tree and a node in it, find the in-order predecessor of that node in the BST.

    Example

    Example1

    Input: root = {2,1,3}, p = 1
    Output: null
    

    Example2

    Input: root = {2,1}, p = 2
    Output: 1
    

    Notice

    If the given node has no in-order predecessor in the tree, return null

    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    
    public class Solution {
        /**
         * @param root: the given BST
         * @param p: the given node
         * @return: the in-order predecessor of the given node in the BST
         */
        public TreeNode inorderPredecessor(TreeNode root, TreeNode p) {
            // write your code here
            TreeNode lowestLeftP = null;
            TreeNode cur = root;
            if (root == null) {
                return null;
            }
            while (cur != p) {
                if (cur.val < p.val) {
                    lowestLeftP = cur;
                    cur = cur.right;
                } else {
                    cur = cur.left;
                }
            }
            TreeNode son = cur.left;
            TreeNode res = son;
            while (son != null) {
                res = son;
                son = son.right;
            }
            if (res != null) {
                return res;
            }
            return lowestLeftP;
        }
    }
  • 相关阅读:
    Linux环境进程间通信
    monitor
    用prctl给线程命名
    openfire本地环境搭建和openfire插件开发实例
    ubuntu12.04的vim配置
    SensorThread线程
    AndroidPN中的心跳检测
    openfire插件开发之完美开发
    poj3322 Bloxorz I
    设计模式总结
  • 原文地址:https://www.cnblogs.com/xuanlu/p/12572093.html
Copyright © 2011-2022 走看看