/**
* 前序
* 每三个节点作为一次循环,先放右再放左,每次循环取出栈中的元素
* @param tree
*/publicstaticvoidpreBinTreeSort(TreeNode tree){if(tree ==null)return;Stack<TreeNode> stack =newStack<TreeNode>();
stack.push(tree);while(!stack.isEmpty()){TreeNode pop = stack.pop();System.out.println(pop.val);if(pop.right!=null){
stack.push(pop.right);}if(pop.left!=null){
stack.push(pop.left);}}}
中序
/**
* 中序
* @param tree
*/publicstaticvoidmidBinTreeSort(TreeNode tree){if(tree ==null)return;Stack<TreeNode> stack =newStack<TreeNode>();TreeNode current = tree;while(current!=null||!stack.isEmpty()){while(current!=null){
stack.push(current);
current = current.left;}
current = stack.pop();System.out.println(current.getVal());
current = current.right;}}
后序
publicstaticvoidbehindBinTreeSort(TreeNode tree){if(tree ==null)return;Stack<TreeNode> stack =newStack<TreeNode>();TreeNode current = tree;TreeNode visitedNode = tree;while(current !=null||!stack.isEmpty()){while(current !=null){
stack.push(current);
current = current.left;}
current = stack.pop();//上一个节点不是当前if(current.getRight()!=null&& current.getRight()!= visitedNode){
stack.push(current);
current = current.right;}else{System.out.println(current.getVal());
visitedNode = current;
current =null;}}}
层序遍历
publicstaticvoidlevelOrder(TreeNode tree){if(tree ==null)return;Deque<TreeNode> queue =newArrayDeque<>();TreeNode current = tree;
queue.add(tree);while(!queue.isEmpty()){
current = queue.poll();if(current.left !=null){
queue.add(current.left);}if(current.right !=null){
queue.add(current.right);}System.out.println(current.getVal());}}