java 二叉树 遍历_二叉树遍历-JAVA实现

本文详细介绍了二叉树的前序、中序、后序遍历,包括递归和非递归实现方式,并通过实例展示了如何使用BinaryTree类进行操作。层次遍历也涵盖其中,适用于层次结构的数据展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 importcom.ccut.aaron.stack.LinkedStack;2

3 public classBinaryTree {4 //前序遍历递归的方式

5 public voidpreOrder(BinaryTreeNode root){6 if(null!=root){7 System.out.print(root.getData()+"\t");8 preOrder(root.getLeft());9 preOrder(root.getRight());10 }11 }12

13 //前序遍历非递归的方式

14 public voidpreOrderNonRecursive(BinaryTreeNode root){15 Stack stack=new Stack();16 while(true){17 while(root!=null){18 System.out.print(root.getData()+"\t");19 stack.push(root);20 root=root.getLeft();21 }22 if(stack.isEmpty()) break;23 root=stack.pop();24 root=root.getRight();25 }26 }27

28 //中序遍历采用递归的方式

29 public voidinOrder(BinaryTreeNode root){30 if(null!=root){31 inOrder(root.getLeft());32 System.out.print(root.getData()+"\t");33 inOrder(root.getRight());34 }35 }36

37 //中序遍历采用非递归的方式

38 public voidinOrderNonRecursive(BinaryTreeNode root){39 Stack stack=new Stack();40 while(true){41 while(root!=null){42 stack.push(root);43 root=root.getLeft();44 }45 if(stack.isEmpty())break;46 root=stack.pop();47 System.out.print(root.getData()+"\t");48 root=root.getRight();49 }50 }51

52 //后序遍历采用递归的方式

53 public voidpostOrder(BinaryTreeNode root){54 if(root!=null){55 postOrder(root.getLeft());56 postOrder(root.getRight());57 System.out.print(root.getData()+"\t");58 }59 }60

61 //后序遍历采用非递归的方式

62 public voidpostOrderNonRecursive(BinaryTreeNode root){63 Stack stack=new Stack();64 while(true){65 if(root!=null){66 stack.push(root);67 root=root.getLeft();68 }else{69 if(stack.isEmpty()) return;70

71 if(null==stack.lastElement().getRight()){72 root=stack.pop();73 System.out.print(root.getData()+"\t");74 while(root==stack.lastElement().getRight()){75 System.out.print(stack.lastElement().getData()+"\t");76 root=stack.pop();77 if(stack.isEmpty()){78 break;79 }80 }81 }82

83 if(!stack.isEmpty())84 root=stack.lastElement().getRight();85 else

86 root=null;87 }88 }89 }90

91 //层序遍历

92 public voidlevelOrder(BinaryTreeNode root){93 BinaryTreeNode temp;94 Queue queue=new LinkedList();95 queue.offer(root);96 while(!queue.isEmpty()){97 temp=queue.poll();98 System.out.print(temp.getData()+"\t");99 if(null!=temp.getLeft())100 queue.offer(temp.getLeft());101 if(null!=temp.getRight()){102 queue.offer(temp.getRight());103 }104 }105 }106

107 public static voidmain(String[] args) {108 BinaryTreeNode node10=new BinaryTreeNode(10,null,null);109 BinaryTreeNode node8=new BinaryTreeNode(8,null,null);110 BinaryTreeNode node9=new BinaryTreeNode(9,null,node10);111 BinaryTreeNode node4=new BinaryTreeNode(4,null,null);112 BinaryTreeNode node5=new BinaryTreeNode(5,node8,node9);113 BinaryTreeNode node6=new BinaryTreeNode(6,null,null);114 BinaryTreeNode node7=new BinaryTreeNode(7,null,null);115 BinaryTreeNode node2=new BinaryTreeNode(2,node4,node5);116 BinaryTreeNode node3=new BinaryTreeNode(3,node6,node7);117 BinaryTreeNode node1=new BinaryTreeNode(1,node2,node3);118

119 BinaryTree tree=newBinaryTree();120 //采用递归的方式进行遍历

121 System.out.println("-----前序遍历------");122 tree.preOrder(node1);123 System.out.println();124 //采用非递归的方式遍历

125 tree.preOrderNonRecursive(node1);126 System.out.println();127

128

129 //采用递归的方式进行遍历

130 System.out.println("-----中序遍历------");131 tree.inOrder(node1);132 System.out.println();133 //采用非递归的方式遍历

134 tree.inOrderNonRecursive(node1);135 System.out.println();136

137 //采用递归的方式进行遍历

138 System.out.println("-----后序遍历------");139 tree.postOrder(node1);140 System.out.println();141 //采用非递归的方式遍历

142 tree.postOrderNonRecursive(node1);143 System.out.println();144

145 //采用递归的方式进行遍历

146 System.out.println("-----层序遍历------");147 tree.levelOrder(node1);148 System.out.println();149 }150 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值