如何创建一颗二叉链表的二叉树?
来源:互联网 发布:抓老鼠 知乎 编辑:程序博客网 时间:2024/05/18 11:47
如何创建一颗二叉链表的二叉树?非常的简单,就是将二叉树的数组表示,转化为二叉链表。如下如所示的树,其数组表示为:
{1,2,3,4,5,6,null,null,null, 7,8}节点的内容保存在数组中,节点间的父子兄弟关系保存在数组的下标中。
测试:
控制台输出:
前序遍历12457836中序遍历42758163
由于一颗树的前序遍历和中序遍历可以唯一的确定一颗树,所以由控制台的输出,可以确定我们已经正确的构建了一颗二叉链表的二叉树。
代码如下:
import java.util.ArrayList;/** * @author liyiwen1 * @date 2016/12/27 */public class TreeBuilder{ public static void main(String[] args) { Tree tree = builde(new Integer[]{1,2,3,4,5,6,null,null,null, 7,8}); System.out.println("前序遍历"); tree.preOrder(); System.out.println("中序遍历"); tree.midOrder(); } public static Tree builde(Integer[] values){ if (values != null && values.length != 0){ Tree tree = new Tree(); TreeNode[] nodes = new TreeNode[values.length]; for (int i = 0; i < values.length; ++i){ if (values[i] != null){ TreeNode node = new TreeNode(); node.value = values[i]; nodes[i] = node; int parent = (i - 1) / 2;//父节点 if (parent >= 0 && nodes[parent] != null){ if (i % 2 == 0){//偶数为右孩子,奇数为左孩子 nodes[parent].right = node; }else{ nodes[parent].left = node; } } } } if (nodes[0] != null){ tree.root = nodes[0]; } return tree; } return null; } public static class Tree{ private TreeNode root; public TreeNode getRoot() { return root; } private void setRoot(TreeNode root) { this.root = root; } public void preOrder(){ preOrder(root); } public void midOrder(){ midOrder(root); } private void preOrder(TreeNode node){ if (node != null){ System.out.println(node.value); preOrder(node.left); preOrder(node.right); } } private void midOrder(TreeNode node){ if (node != null){ midOrder(node.left); System.out.println(node.value); midOrder(node.right); } } } public static class TreeNode{ private int value; private TreeNode left; private TreeNode right; }}
0 0
- 如何创建一颗二叉链表的二叉树?
- 二叉树的二叉链表创建
- 创建一二叉树
- 一:二叉树的性质及创建
- 二叉链表的创建
- 创建一颗最小二叉查找树
- 以二叉链表的方式创建一棵二叉树,并以非递归算法中序输出;计算二叉树的繁茂度,并判断二叉树是否为完全二叉树
- 创建一棵二叉树
- 二叉树的创建
- 二叉树的创建
- 二叉树的创建。
- 二叉树的创建
- 二叉树的创建
- 二叉树的创建
- 二叉树的创建
- 二叉树的创建
- 二叉树的创建
- 二叉树的 创建
- WPF TextBox选择指定行文本
- 模拟实现一个字符串的反转的9种方法
- [hdu4547] CD操作
- DataTable TO Excel数据导出
- activity service之间用handler通信的疑问
- 如何创建一颗二叉链表的二叉树?
- android 在多个页面之间实现底部悬浮框不变
- mac下如何实现串口通讯
- 2017年关于健身要做的事儿
- 综合作业——APP(1)
- android UI设计 实现下面界面要用到fragment的
- 【Spring】——Spring Framework Introduction
- android ble 中使用connectGatt()进行连接,没有进入onConnectionStateChange()回调函数
- 模拟实现一个字符串的反转