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

Posted Push your limit!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[GeeksForGeeks] Populate inorder successor for all nodes in a binary search tree相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose .populate 随机

为啥这段代码在 leetcode 运行良好,但在 geeksforgeeks 出现分段错误?

猫鼬'populate()'没有填充

Model.populate() 是不是返回一个承诺?

如何正确使用函数 populate()

GeeksForGeeks 翻译计划