假设节点数据类如下:
public class TreeNode {
String val;
TreeNode left;
TreeNode right;
TreeNode() { }
TreeNode(String val) {
this.val = val;
}
TreeNode(String val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
二叉数存储数据
1.前序遍历
先遍历根节点,然后左节点,再遍历右节点。
/**
* 二叉树 前序遍历 根 --> 左 --> 右
*/
public static void preTravel(TreeNode node){
if(node == null){
return;
}
System.out.print(node.val+" ");
preTravel(node.left);
preTravel(node.right);
}
输出: ABDFECGHI
2.中序遍历
先遍历左节点,然后根节点,再遍历右节点。
/**
* 二叉树 中序遍历 左 --> 根 --> 右
* @param node
*/
public static void middleTraveral(TreeNode node){
if(node == null){
return;
}
preTravel(node.left);
System.out.print(node.val+" ");
preTravel(node.right);
}
输出: DBEFAGHCI
3.后序遍历
先遍历左节点,然后右节点,再遍历根节点。
/**
* 后续遍历 左 --> 右 --> 根
* @param node
*/
public static void postTraveral(TreeNode node){
if(node == null){
return;
}
preTravel(node.left);
preTravel(node.right);
System.out.print(node.val+" ");
}
输出:DEFBHGICA
4.层序遍历
先遍历第一层,在顺序遍历到最后层。
/**
* 层序遍历, 先遍历第一层,按顺序到最后层
*
* @param root
*/
public static void levelOrder(TreeNode root){
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
root = queue.pop();
System.out.print(root.val+" ");
// 增加左 右
if(root.left!=null) queue.add(root.left);
if(root.right!=null) queue.add(root.right);
}
}
输出:ABCDFGIEF