如何创建一颗二叉链表的二叉树?非常的简单,就是将二叉树的数组表示,转化为二叉链表。如下如所示的树,其数组表示为:
{1,2,3,4,5,6,null,null,null, 7,8}节点的内容保存在数组中,节点间的父子兄弟关系保存在数组的下标中。
测试:
控制台输出:
前序遍历 1 2 4 5 7 8 3 6 中序遍历 4 2 7 5 8 1 6 3
由于一颗树的前序遍历和中序遍历可以唯一的确定一颗树,所以由控制台的输出,可以确定我们已经正确的构建了一颗二叉链表的二叉树。
代码如下:
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; } }
本文介绍了如何将二叉树的数组表示转换成二叉链表,详细解析了转化过程,适用于理解二叉树和二叉链表之间的相互转换。
1513

被折叠的 条评论
为什么被折叠?



