假设节点数据类如下:
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