public List preorderTraversal(TreeNode root) {
Stack stack = new Stack();
List res = new ArrayList();
TreeNode node = root;
while(node != null || !stack.isEmpty()){
if(node != null){
stack.push(node);
res.add(node.val);
node = node.left;
}else{
TreeNode top = stack.pop();
if(top.right != null){
node = top.right;
}
}
}
return res;
}
public List inorderTraversal(TreeNode root) {
Stack stack = new Stack();
List res = new ArrayList();
while(root != null || !stack.isEmpty()){
if(root != null){
stack.push(root);
root = root.left;
}else{
TreeNode top = stack.pop();
res.add(top.val);
root = top.right;
}
}
return res;
}
public List postorderTraversal(TreeNode root) {
Stack stack = new Stack();
List res = new ArrayList();
TreeNode prev = null;
while(root != null || !stack.isEmpty()){
if(root != null){
stack.push(root);
root = root.left;
}else{
TreeNode top = stack.peek();
if(top.right != null && top.right != prev){
root = top.right;
}else{
stack.pop();
res.add(top.val);
prev = top;
}
}
}
return res;
}
//拓展
//recover inorder based on given preorder
//Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary search tree.
//You may assume each number in the sequence is unique.
public boolean verifyPreorder(int[] preorder) {
Stack stack = new Stack();
Stack inorder = new Stack();
for(int v:preorder){
if(!inorder.isEmpty() && v < inorder.peek())
return false;
while(!stack.isEmpty() && stack.peek() < v){
inorder.push(stack.pop());
}
stack.push(v);
}
return true;
}
[Index]Binary Tree Iterative Traversal
最新推荐文章于 2022-07-02 16:50:24 发布