java 先序遍历_二叉树的前序中序后序遍历(java代码)

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值