2019-08-05-二叉树(下)

现在来讨论链表构建的二叉树递归形式

图和上一篇的一样,代码如下,就是输入需要说明一下。

package com.rjy.repo.zju.datastrueture.chapter03;

import java.util.Scanner;

/**
 * 构建链式的二叉树,需要递归创建!
 *
 * 我们把每个节点的数据定义位一个字符
 * */
class BinaryTree {
    // 每个节点的值,包括左右指针,数据区
    private BinaryTree left, right;
    private char data;

    // 创建二叉树,前序的方式创建
    public BinaryTree creat(String des) {

        System.out.println(des+":");

        Scanner sc = new Scanner(System.in);

        String str = sc.next();

        if(str.charAt(0) < 'a') return null;

        // 创建节点
        BinaryTree node = new BinaryTree();

        // 给每个节点赋值

        char data = str.charAt(0);

        node.data = data;

        node.left = creat(data + " left");
        node.right = creat(data + " right");

        return node;

    }

    // 二叉树前序遍历
    public void preOrder(BinaryTree root) {
        if(root != null) {
            System.out.println(root.data);
            preOrder(root.left);
            preOrder(root.right);
        }
    }

    // 二叉树中序遍历
    public void midOrder(BinaryTree root) {
        if(root != null) {
            midOrder(root.left);
            System.out.println(root.data);
            midOrder(root.right);
        }
    }

    // 二叉树后序遍历
    public void lastOrder(BinaryTree root) {
        if(root != null) {
            lastOrder(root.left);
            lastOrder(root.right);
            System.out.println(root.data);
        }
    }
}

public class BinaryTreeDemo03 {
    public static void main(String[] args) {
        BinaryTree bt = new BinaryTree();

        BinaryTree root = bt.creat("root");
        System.out.println("先序遍历:");
        bt.preOrder(root);
        System.out.println("中序遍历:");
        bt.midOrder(root);
        System.out.println("后续遍历 ");
        bt.lastOrder(root);
    }
}

输入:

root:
a
a left:
b
b left:
1
b right:
1
a right:
c
c left:
d
d left:
1
d right:
1
c right:
e
e left:
f
f left:
1
f right:
1
e right:
1
先序遍历:
a
b
c
d
e
f
中序遍历:
b
a
d
c
f
e
后续遍历 
b
d
f
e
c
a

你可能感兴趣的:(2019-08-05-二叉树(下))