http://www.geeksforgeeks.org/inorder-successor-in-binary-search-tree/
In the above diagram,
Case1: Has right child, go anyway: inorder successor of 8 is 10,
Case2: No right child and itself is left child : inorder successor of 10 is 12
Case3: No right child and itself is right child: inorder successor of 14 is 20.
http://www.cnblogs.com/AnnieKim/archive/2013/06/15/MorrisTraversal.html
2. Implementation
public static TreeNode inorderSuccessor(TreeNode e) { // valdiate the input if ( e == null ) return null; TreeNode succ; // Case 1: Has right child if ( e.parent == null || e.right != null ) { succ = leftMostChild(e.right); } // Case 2,3: No right child else { // case while( (succ = e.parent) != null ) { // Case2: No right child and itself is left child if ( succ.left == e) break; // Case3: No right child and itself is right child e = succ; } } return succ; } public static TreeNode leftMostChild(TreeNode e) { // vlaidate the input if ( e == null) return null; // while(e!= null) // NOTE: STOP at e == null, not we want while ( e.left!= null ) // NOTE: STOP at e.left == null e = e.left; return e; }3. Similar Ones
No comments:
Post a Comment