二叉树的创建和遍历方法(下)
来源:互联网 发布: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
- 二叉树的创建和遍历方法(下)
- 二叉树的创建和遍历方法(上)
- 二叉树的创建和各种遍历方法
- 二叉树的创建和前中后三种遍历方法
- 二叉树的创建以及遍历方法
- 二叉树的创建和各种递归非递归遍历方法研究(一)
- 二叉搜索树的创建和遍历
- 二叉树的创建,遍历和释放
- 简单的二叉树创建和遍历
- 二叉树的创建和遍历
- 二叉树的创建和遍历
- 二叉树的创建和遍历
- 二叉树的创建和遍历
- 二叉树的创建和遍历
- 数据结构---二叉树的创建和遍历
- 二叉树的创建和遍历
- 二叉树的创建和遍历
- 二叉树的创建和前序中序后序遍历
- java4月18数组
- 吴恩达机器学习笔记_第四周
- HADOOP 分布模式
- Intent传值用法
- MATLAB 3
- 二叉树的创建和遍历方法(下)
- 实现圆形头像的几种方法
- push_back()函数和push()函数不要混淆
- 几个有用的dmidecode命令
- UIEdgeInsets 说明
- 【欧拉函数,莫比乌斯反演】
- Android中LoaderManager:AsyncTaskLoader和CursorLoader的使用
- 二叉搜索树实现 in Go语言
- Java系列(一)Annotation(注解)