码迷,mamicode.com
首页 > 其他好文 > 详细

[GeeksForGeeks] Populate inorder successor for all nodes in a binary search tree

时间:2017-08-23 10:36:21      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:geek   treenode   code   int   geeks   next   ==   from   sso   

Given a binary search tree with the following tree node definition.

next points to a node‘s inorder successor.

Populate inorder successor for all nodes in this bst.

 1 class TreeNodeWithNext {
 2     int val;
 3     TreeNodeWithNext left, right, next;
 4     public TreeNodeWithNext(int v) {
 5         this.val = v;
 6         this.left = null;
 7         this.right = null;
 8         this.next = null;
 9     }
10 }

 

Recursive solution using reverse in order traversal.

Since we need to set each node‘s next to its inorder successor, in order traversal is the natural way to acheive this.

We can either traverse in order from smaller value nodes to bigger value nodes or vice versa.

 1 private TreeNodeWithNext prev = null;
 2 public void populateInorderSuccessorRecursion(TreeNodeWithNext root) {
 3     if(root == null) {
 4         return;
 5     }
 6     populateInorderSuccessorRecursion(root.left);
 7     if(prev != null) {
 8         prev.next = root;
 9     }
10     prev = root;
11     populateInorderSuccessorRecursion(root.right);
12 }

 

 1 public class PopulateInorderSuccessor {
 2     private TreeNodeWithNext next = null;
 3     public void populateInorderSuccessorRecursion(TreeNodeWithNext root) {
 4         if(root == null) {
 5             return;
 6         }
 7         populateInorderSuccessorRecursion(root.right);
 8         root.next = next;
 9         next = root;
10         populateInorderSuccessorRecursion(root.left);
11     }
12 }

 

Iterative solution.

Instead of using recursion, we can use a stack to simulate the recursive process and get the following iterative solution.

 1 public void populateInorderSuccessorIterative(TreeNodeWithNext root) {
 2     if(root == null) {
 3         return;
 4     }
 5     TreeNodeWithNext prev = null, curr = root;
 6     Stack<TreeNodeWithNext> stack = new Stack<TreeNodeWithNext>();
 7     while(curr != null || !stack.isEmpty()) {
 8         while(curr != null) {
 9             stack.push(curr);
10             curr = curr.left;
11         }
12         curr = stack.pop();
13         if(prev != null) {
14             prev.next = curr;
15         }
16         prev = curr;
17         curr = curr.right;
18     }
19 }

 

[GeeksForGeeks] Populate inorder successor for all nodes in a binary search tree

标签:geek   treenode   code   int   geeks   next   ==   from   sso   

原文地址:http://www.cnblogs.com/lz87/p/7416246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!