首页 > 其他 > 详细

二叉树的创建和遍历

时间:2019-08-29 14:48:11      阅读:80      评论:0      收藏:0      [点我收藏+]

二叉树创建:

  1.创建树的结点TreeNode,包含结点的编号no,结点的名字name,左子树left,右子树right,

  2.创建树,创建树只需要创建有一个根节点(TreeNode root)就ok 

  

二叉树遍历:

  1,先序遍历:先输出根节点,再递归左子树,然后递归右子树

  2,中序遍历:先递归左子树,然后输入根节点,再递归右子树

  3,后序遍历:先递归左子树,再递归右子树,然后输出根节点

 

实验:

  创建如下的二叉树并遍历

  技术分享图片

 

代码

package Tree;

public class BinaryTreeDemo {
    public static void main(String[] args) {
        BinaryTree binaryTree = new BinaryTree();
        //创建结点
        TreeNode root = new TreeNode(1,"宋江");
        TreeNode treeNode2 = new TreeNode(2,"林冲");
        TreeNode treeNode3 = new TreeNode(3,"吴用");
        TreeNode treeNode4 = new TreeNode(4,"关胜");
        TreeNode treeNode5 = new TreeNode(5,"卢俊义");
        //创建树结构
        root.setLeft(treeNode2);
        root.setRight(treeNode3);
        treeNode3.setRight(treeNode5);
        treeNode3.setLeft(treeNode4);

        //挂上树
        binaryTree.setTree(root);

        System.out.println("------------------");
        System.out.println("前序遍历");
        binaryTree.preOrder();
        System.out.println("------------------");
        System.out.println("中序遍历");
        binaryTree.midOrder();
        System.out.println("------------------");
        System.out.println("后序遍历");
        binaryTree.endOrder();


    }
}

//创建树
class BinaryTree{
    private TreeNode root;

    public void setTree(TreeNode root) {
        this.root = root;
    }

    //前序遍历
    public void preOrder(){
        if (this.root != null){
            this.root.preOrder();
        }
        else {
            System.out.println("空树");
        }
    }
    //中序遍历
    public void midOrder(){
        if (this.root != null){
            this.root.midOrder();
        }
        else {
            System.out.println("空树");
        }
    }

    //后序遍历
    public void endOrder(){
        if (this.root != null){
            this.root.endOrder();
        }
        else {
            System.out.println("空树");
        }
    }
}

//创建树结点
class TreeNode{
    private int no;//结点编号
    private String name;//结点名称
    private TreeNode left;//左结点指针
    private TreeNode right;//右结点指针
    public TreeNode(int no, String name) {
        this.no = no;
        this.name = name;
    }
    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public TreeNode getLeft() {
        return left;
    }

    public void setLeft(TreeNode left) {
        this.left = left;
    }

    public TreeNode getRight() {
        return right;
    }

    public void setRight(TreeNode right) {
        this.right = right;
    }

    @Override
    public String toString() {
        return "TreeNode{" +
                "no=" + no +
                ", name=‘" + name + ‘\‘‘ +
                ‘}‘;
    }

    //前序遍历
    public void preOrder(){
        //输出root结点
        System.out.println(this);
        if (this.left != null){
            this.left.preOrder();//递归左子结点
        }
        if (this.right != null){
            this.right.preOrder();
        }
    }

    //中序遍历
    public void midOrder(){
        //先遍历左子树
        if (this.left != null){
            this.left.midOrder();
        }
        //输出根结点
        System.out.println(this);
        if (this.right != null){
            this.right.midOrder();
        }
    }

    //后续遍历
    public void endOrder(){
        if (this.left != null){
            this.left.endOrder();
        }
        if (this.right != null){
            this.right.endOrder();
        }
        //输出根结点
        System.out.println(this);
    }
}

 

满二叉树:

技术分享图片

 

完全二叉树

技术分享图片

 

二叉树的创建和遍历

原文:https://www.cnblogs.com/steakliu/p/11429443.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!