Medium 285题 Inorder Successor in BST

来源:互联网 发布:搞笑淘宝买家秀图评论 编辑:程序博客网 时间:2024/06/08 15:03

Question:

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

Solution:

分两种情况讨论,参考了https://segmentfault.com/a/1190000003792039,存下所有路径

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {        Stack<TreeNode> st=new Stack<TreeNode>();        while(p!=root){            st.push(root);            if(root.val>p.val)                root=root.left;            else                root=root.right;        }        if(p.right!=null)            return FindMostLeft(p.right);        else{            return Find(p,st);        }                }    public TreeNode FindMostLeft(TreeNode node)    {        while(node.left!=null)            node=node.left;        return node;    }        public TreeNode Find(TreeNode p, Stack<TreeNode> st){                while(!st.isEmpty()&&st.peek().val<p.val)            st.pop();        if(st.isEmpty())            return null;        else            return st.peek();    }}

对。。根本不用分类讨论

if (root == null || p == null) return null;        TreeNode res=null;        while(root!=null){            if(root.val<=p.val)                root=root.right;            else{                res=root;                root=root.left;            }        }        return res;

递归求

if(root==null) return null;                if(root.val<=p.val)            return inorderSuccessor(root.right,p);        else        {            TreeNode left=inorderSuccessor(root.left,p);            return left==null?root:left;        }

这个方法也可以求前面那个节点~改一下就好
public TreeNode predecessor(TreeNode root, TreeNode p) {  if (root == null)    return null;  if (root.val >= p.val) {    return predecessor(root.left, p);  } else {    TreeNode right = predecessor(root.right, p);    return (right != null) ? right : root;  }}



0 0
原创粉丝点击