伪代码
代码实现
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;
public class ValidateBinarySearchTree {
public static void main(String[] args) {
TreeNode t = new TreeNode(5);
t.left = new TreeNode(1);
t.right = new TreeNode(4);
t.right.left = new TreeNode(3);
t.right.right = new TreeNode(6);
List<Integer> list = new ArrayList();
A(t,new Stack(),list);
System.out.println(Arrays.toString(list.toArray()));
}
//中序遍历
public static boolean A(TreeNode root , Stack<TreeNode> stack , List<Integer> list){
while(true){
//1 左不为空,入栈,考察左子树
if(root.left!=null){
stack.push(root);
root=root.left;
continue;
}
//2 左为空 add中根 考察右子树
list.add(root.val);
//3 右子树不为空 考察右子树 为空 弹栈 栈也为空 结束
while(root.right==null){
if(stack.isEmpty()) return;
else{
root = stack.pop();
list.add(root.val);
}
}
root = root.right;
continue;
}
return false;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}