package com.interview.books.ninechapter; import com.interview.leetcode.utils.TreeNode; import com.interview.leetcode.utils.TreeNodePrinter; import java.util.Stack; /** * Created_By: stefanie * Date: 14-12-12 * Time: 下午5:13 */ public class NC11_MaxTreeBuilder { //Time: O(N), Space O(N) public TreeNode build(int[] array){ Stack<TreeNode> stack = new Stack<>(); for(int i = 0; i < array.length; i++){ TreeNode current = new TreeNode(array[i]); while(!stack.isEmpty() && stack.peek().val < current.val){ TreeNode node = stack.pop(); if(!stack.isEmpty() && stack.peek().val < current.val){ //parent is the first larger element in left stack.peek().right = node; } else { current.left = node; //parent is the first larger element in right } } stack.push(current); } while(stack.size() > 1){ TreeNode node = stack.pop(); stack.peek().right = node; } return stack.pop(); } public static void main(String[] args){ NC11_MaxTreeBuilder builder = new NC11_MaxTreeBuilder(); int[] array = new int[]{1,3,2,8,7,4,6,5}; TreeNode root = builder.build(array); TreeNodePrinter.print(root); } }