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;
}
}
總結
以上是生活随笔為你收集整理的java 先序遍历_二叉树的前序中序后序遍历(java代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一次连接mysql失败_MySQL 远
- 下一篇: 《绍古辞》是谁的作品?