importjava.util.*;
public classtraversal {
public static voidmain(String[] args) {
List list=newArrayList<>();
//构造二叉树
TreeNode treeNode6=newTreeNode(2,null,null);
TreeNode treeNode5=newTreeNode(1,null,null);
TreeNode treeNode4=newTreeNode(7,null,null);
TreeNode treeNode3=newTreeNode(6,treeNode5,treeNode6);
TreeNode treeNode2=newTreeNode(5,treeNode4,null);
TreeNode root=newTreeNode(3,treeNode2,treeNode3);
list = recursivePreoderTraversal(root);
System.out.println("递归 前序 遍历:"+list.toString());
list = NotRecursivePreoderTraversal(root);
System.out.println("非递归前序遍历:"+list.toString());
list = recursiveInoderTraversal(root);
System.out.println("递归 中序 遍历:"+list.toString());
list = NotRecursiveInoderTraversal(root);
System.out.println("非递归中序遍历:"+list.toString());
list = recursivePostoderTraversal(root);
System.out.println("递归 后序 遍历:"+list.toString());
list = NotRecursivePostoderTraversal(root);
System.out.println("非递归后序遍历:"+list.toString());
}
//递归前序遍历
public staticList recursivePreoderTraversal(TreeNode root){
List list=newArrayList<>();
recursivePreoderTraverse(root,list);
returnlist;
}
public static voidrecursivePreoderTraverse(TreeNode root,List list) {
if(root==null) return;
list.add(root.val);
recursivePreoderTraverse(root.left,list);
recursivePreoderTraverse(root.right,list);
}
//非递归前序遍历
public staticList NotRecursivePreoderTraversal(TreeNode root){
if(root == null) return null;
List list=newArrayList<>();
Stack stack = newStack<>();
while(!stack.isEmpty() || root != null){
while(root != null){
list.add(root.val);
stack.push(root);
root = root.left;
}
if(!stack.isEmpty()){
TreeNode tNode = stack.pop();
root = tNode.right;
}
}
returnlist;
}
//递归中序遍历
public staticList recursiveInoderTraversal(TreeNode root){
List list=newArrayList<>();
recursiveInoderTraverse(root,list);
returnlist;
}
public static voidrecursiveInoderTraverse(TreeNode root,List list) {
if(root==null) return;
recursiveInoderTraverse(root.left,list);
list.add(root.val);
recursiveInoderTraverse(root.right,list);
}
//非递归中序遍历
public staticList NotRecursiveInoderTraversal(TreeNode root){
if(root == null) return null;
List list=newArrayList<>();
Stack stack = newStack<>();
while(!stack.isEmpty() || root != null){
while(root != null){
stack.push(root);
root = root.left;
}
if(!stack.isEmpty()){
TreeNode tNode = stack.pop();
list.add(tNode.val);
root = tNode.right;
}
}
returnlist;
}
//递归后序遍历
public staticList recursivePostoderTraversal(TreeNode root){
List list=newArrayList<>();
recursivePostoderTraverse(root,list);
returnlist;
}
public static voidrecursivePostoderTraverse(TreeNode root,List list) {
if(root==null) return;
recursivePostoderTraverse(root.left,list);
recursivePostoderTraverse(root.right,list);
list.add(root.val);
}
//非递归后序遍历
public staticList NotRecursivePostoderTraversal(TreeNode root){
if(root == null) return null;
List list=newArrayList<>();
Stack stack = newStack<>();
TreeNode temp = null;
while(!stack.isEmpty() || root != null){
while(root != null){
stack.push(root);
root = root.left;
}
if(!stack.isEmpty()){
TreeNode tNode = stack.pop();
if(tNode.right== null|| temp == tNode.right){
list.add(tNode.val);
temp = tNode;
}
else{
stack.push(tNode);
root = tNode.right;
}
}
}
returnlist;
}
}