二叉树的创建和遍历方法(下)

来源:互联网 发布:python sql注入脚本 编辑:程序博客网 时间:2024/06/10 16:08

二叉树除了可以使用一维数组存储,还可以使用链表形式。使用链表的好处是对节点的增删很容易实现。可以定义两个类:节点类TreeNode和二叉树类BinaryTree。BinaryTree类包含根节点以及添加节点的方法addNode(int value),TreeNode类包含成员value以及其左右子节点。这样,在创建二叉树时,所有节点之间的关系便确定了。以下为实现代码

import java.util.*;public class BinaryTreeLink {public static ArrayList<TreeNode> cachePre = new ArrayList<>();//存储前序遍历结果public static ArrayList<TreeNode> cacheIn = new ArrayList<>();//存储中序遍历结果public static ArrayList<TreeNode> cachePost = new ArrayList<>();//存储后序遍历结果public static void main(String[] args){int[] data = {6, 3, 5, 9, 7, 8, 4, 2};BinaryTree tree = new BinaryTree(data);preOrder(tree.rootNode);inOrder(tree.rootNode);postOrder(tree.rootNode);System.out.println("The initial data: ");for(int i:data){System.out.print(i+" ");}System.out.println();System.out.println("前序遍历:");for(TreeNode i:cachePre){System.out.print(i.value+" ");}System.out.println();System.out.println("中序遍历:");for(TreeNode i:cacheIn){System.out.print(i.value+" ");}System.out.println();System.out.println("后序遍历:");for(TreeNode i:cachePost){System.out.print(i.value+" ");}System.out.println();}public static void preOrder(TreeNode node){//前序遍历if(node!=null){cachePre.add(node);preOrder(node.leftNode);preOrder(node.rightNode);}}public static void inOrder(TreeNode node){//中序遍历if(node!=null){inOrder(node.leftNode);cacheIn.add(node);inOrder(node.rightNode);}}public static void postOrder(TreeNode node){//后序遍历if(node!=null){postOrder(node.leftNode);postOrder(node.rightNode);cachePost.add(node);}}}class TreeNode{//节点类int value;TreeNode leftNode;TreeNode rightNode;public TreeNode(int value){this.value = value;this.leftNode = null;this.rightNode = null;}}class BinaryTree{//二叉树类public TreeNode rootNode;public BinaryTree(int[] data){//根据原始数据,添加树节点for(int i:data){addNode(i);}}public void addNode(int value){//添加树节点遵循左小右大的原则if(rootNode==null){rootNode = new TreeNode(value);return;}TreeNode currentNode = rootNode;while(true){if(value>currentNode.value){if(currentNode.rightNode==null){currentNode.rightNode = new TreeNode(value);return;}currentNode = currentNode.rightNode;}else{if(currentNode.leftNode==null){currentNode.leftNode = new TreeNode(value);return;}currentNode = currentNode.leftNode;}}}}

输出:

The initial data: 
6 3 5 9 7 8 4 2 
前序遍历:
6 3 2 5 4 9 7 8 
中序遍历:
2 3 4 5 6 7 8 9 
后序遍历:
2 4 5 3 8 7 9 6 

0 0
原创粉丝点击