如何创建一颗二叉链表的二叉树?

来源:互联网 发布:抓老鼠 知乎 编辑:程序博客网 时间: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
原创粉丝点击