二叉树是树的一种,每个结点最多可具有两个子树,即结点的度最大为2。
区分到底是前序、中序还是后序其实很简单,主要是相对于当前节点来说的。
以下图为例:
先访问根节点,然后访问左节点,最后访问右节点。
【root】->【A】->【C】 ->【G】 ->【D】->【B】 ->【E】->【F】
先访问左节点,然后访问根节点,最后访问右节点。
【G】->【C】->【A】 ->【D】 ->【root】->【E】 ->【B】->【F】
先访问左节点,然后访问右节点,最后访问根节点。
【G】->【C】->【D】 ->【A】 ->【E】->【F】 ->【B】->【root】
/** * 节点数据结构 */
class TreeNode {
public String data;
public TreeNode left = null;
public TreeNode right = null;
public TreeNode(String data, TreeNode left, TreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
public TreeNode(String data) {
this.data = data;
}
public TreeNode() {}
}
/** * 二叉树 */
class BinaryTree {
// 二叉树的根节点
public TreeNode root;
/** * 前序遍历 */
public void preOrder(TreeNode node) {
// 只有当前节点不为null 才向下递归遍历 否则在调用node.left或者node.right时就会报空指针异常
if (node != null) {
// 1、输出当前节点
System.out.print(node.data+" ");
//2、递归向左子树前序遍历
preOrder(node.left);
//3、递归向右子树前序遍历
preOrder(node.right);
}
}
/** * 中序遍历 */
public void midOrder(TreeNode node) {
if (node != null) {
//1、递归向左子树中序遍历
midOrder(node.left);
// 2、输出当前节点
System.out.print(node.data+" ");
//3、递归向右子树中序遍历
midOrder(node.right);
}
}
/** * 后序遍历 */
public void postOrder(TreeNode node) {
if (node != null) {
//1、递归向左子树后序遍历
postOrder(node.left);
//2、递归向右子树后序遍历
postOrder(node.right);
// 3、输出当前节点
System.out.print(node.data+" ");
}
}
}
public class BinaryTreeDemo {
public static void main(String[] args) {
// 先创建一颗二叉树
BinaryTree binaryTree = new BinaryTree();
// 为binaryTree创建一个根节点
TreeNode root = new TreeNode("root");
binaryTree.root = root;
// 创建其他节点
TreeNode nodeA = new TreeNode("A");
TreeNode nodeB = new TreeNode("B");
TreeNode nodeC = new TreeNode("C");
TreeNode nodeD = new TreeNode("D");
TreeNode nodeE = new TreeNode("E");
TreeNode nodeF = new TreeNode("F");
TreeNode nodeG = new TreeNode("G");
// 手动调整节点的指向关系
root.left = nodeA; root.right = nodeB;
nodeA.left = nodeC; nodeA.right = nodeD; nodeB.left = nodeE; nodeB.right = nodeF;
nodeC.left = nodeG;
// 前序遍历
System.out.println("前序遍历:");
binaryTree.preOrder(binaryTree.root);
// 中序遍历
System.out.println();
System.out.println("中序遍历:");
binaryTree.midOrder(binaryTree.root);
// 后序遍历
System.out.println();
System.out.println("后序遍历:");
binaryTree.postOrder(binaryTree.root);
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_45464560/article/details/121022856
内容来源于网络,如有侵权,请联系作者删除!