package com.luas.tree;
import com.sun.source.tree.Tree;
/**
* @author by FZB
* @date 2023/8/2
* 二叉树的前序遍历,中序遍历,后序遍历
*/
public class TreeTraversal {
public static void main(String[] args) {
TreeNode root = new TreeNode(new TreeNode(new TreeNode(4), 2, null),
1,
new TreeNode(new TreeNode(5), 3, new TreeNode(6)));
postOrder(root);
}
/**
* 前序遍历
* 1.先访问该节点的值
* 2.左子树
* 3.右子树
* 递归方式
*/
static void perOrder(TreeNode node) {
//递归得有终止条件,如果节点为null则结束程序
if (node == null) {
return;
}
//首先打印当前节点的值
System.out.println(node.val + "\t");
//然后左子树
perOrder(node.left);
//最后右子树
perOrder(node.right);
}
/**
* 中序遍历
* 1.先左子树
* 2.再该节点
* 3.最后右子树
* @param node
*/
static void inOrder(TreeNode node){
//如果节点为空终止
if(node == null){
return;
}
inOrder(node.left);
System.out.println(node.val);
inOrder(node.right);
}
static void postOrder(TreeNode node){
//如果节点为空终止
if(node == null){
return;
}
postOrder(node.left);
postOrder(node.right);
System.out.println(node.val);
}
}
二叉树的遍历:
-
广度优先遍历:尽可能的先访问距离根节点最近的节点,也称位层序遍历
-
深度优先遍历:对于二叉树可以进一步分为三种
-
前序遍历,对于每一棵子树,先访问该节点,然后是左子树最后是右子树
-
中序遍历:对于每一颗子树,先访问左子树,然后是该节点,最后是右子树
-
后序遍历:对于每一棵子树,先访左子树,然后是右子树,最后是该节点
-