天才卢卡 2022-03-23 10:08 采纳率: 0%
浏览 15

Java创建二叉树 有友友知道吗

怎么用迭代法创建一个满二叉树呢,从根节点出发,创建两个子节点,然后再用子节点再创建两个节点,以此类推

  • 写回答

1条回答 默认 最新

  • 关注
    
    //定义一个节点
    class BitNode {
        int data;
        BitNode lchild;
        BitNode rchild;
    
        public void setNode(int data, BitNode lc, BitNode rc) {
            this.data = data;
            lchild = lc;
            rchild = rc;
        }
    }
    
    static int counter = 0;//定义一个静态计数变量
    
    /**
         * 构造二叉树
         * 
         * @param root根节点
         * @param a数据源
         * @param i计数器
         * @return 根节点
         */
        public static BitNode createBiTree(BitNode root, int[] a, int i) {
            if (i < a.length) {
                if (a[i] == 0) {
                    root = null;
                } else {
                    BitNode lchild = new BitNode();
                    BitNode rchild = new BitNode();
                    root.data = a[i];
                    root.lchild = createBiTree2(lchild, a, ++counter);
                    root.rchild = createBiTree2(rchild, a, ++counter);
                }
            }
            return root;
        }
    
    // 访问节点
        public static void visitTNode(BitNode node) {
            System.out.print(node.data + " ");
        }
    
    // 层次遍历
        public static void levelTraverse(BitNode root) {
            Queue<BitNode> queue = new LinkedList<BitNode>();
            queue.offer(root);// 从根节点入队列
            while (!queue.isEmpty()) {// 在队列为空前反复迭代
                BitNode bitNode = queue.poll();// 取出队列首节点
                visitTNode(bitNode);
                if (bitNode.lchild != null)
                    queue.offer(bitNode.lchild);// 左孩子入列
                if (bitNode.rchild != null)
                    queue.offer(bitNode.rchild);// 右孩子入列
            }
        }
    
    public static void main(String[] args) {
            BitNode root = new BitNode();
            int[] a = { 1, 2, 3, 0, 0, 4, 0, 0, 5, 0, 0 };
            root = createBiTree(root, a, counter);
    levelTraverse(root);
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月23日