package com.zwz.treeNode;
import java.util.ArrayList;
import java.util.LinkedList;
/**
* 二叉树遍历
*/
public class TreeNodeService {
static TreeNode setTreeNode(){
TreeNode treeNode = new TreeNode(1,
new TreeNode(2,
new TreeNode(4, null, null),
null),
new TreeNode(3,
new TreeNode(5, null, null),
new TreeNode(6, null, null)));
return treeNode;
}
/**
* 前序遍历
* 先访问一个节点
* 然后访问左树
* 再访问右树
*/
public static void preOrder(TreeNode treeNode){
if(treeNode == null){
return;
}
System.out.print(treeNode.val+" ");
preOrder(treeNode.left);
preOrder(treeNode.right);
}
/**
* 中序遍历
* 先访问左树
* 然后访问一个节点
* 再访问右树
*/
public static void inOrder(TreeNode treeNode){
if(treeNode == null){
return;
}
inOrder(treeNode.left);
System.out.print(treeNode.val+" ");
inOrder(treeNode.right);
}
/**
* 后序遍历
* 先访问左树
* 再访问右树
* 先访问一个节点
*/
public static void postOrder(TreeNode treeNode){
if(treeNode == null){
return;
}
postOrder(treeNode.left);
postOrder(treeNode.right);
System.out.print(treeNode.val+" ");
}
/**
* 非递归遍历
* 使用栈 记录遍历路径
* 前中序遍历
*/
public static void setStock(TreeNode treeNode){
LinkedList<TreeNode> stock = new LinkedList<>();
while (treeNode != null || !stock.isEmpty()){
if(treeNode != null){
System.out.println("前:"+treeNode.val);
stock.push(treeNode);
treeNode = treeNode.left;
}else{
TreeNode poll = stock.pop();
System.err.println("中:"+poll.val);
treeNode = poll.right;
}
}
}
/**
* 非递归遍历
* 使用栈 记录遍历路径
* 后续遍历
*/
public static void setStockPost(TreeNode treeNode){
LinkedList<TreeNode> stock = new LinkedList<>();
TreeNode poll = null;
while (treeNode != null || !stock.isEmpty()){
if(treeNode != null){
stock.push(treeNode);
treeNode = treeNode.left;
}else{
//此处用栈顶元素的右节点比较是否处理过
TreeNode peek = stock.peek();
if(peek.right == null || peek.right == poll){
poll = stock.pop();
System.out.println("后:"+poll.val);
}else{
treeNode = peek.right;
}
}
}
}
public static void main(String[] args) {
TreeNode treeNode = setTreeNode();
preOrder(treeNode);
System.out.println();
inOrder(treeNode);
System.out.println();
postOrder(treeNode);
System.out.println("");
System.out.println("=================");
//setStock(treeNode);
setStockPost(treeNode);
}
}
数据结构和算法--二叉树遍历
于 2023-05-05 17:02:11 首次发布