树论基本操作-建立二叉树以及相关概念

package com.redis.binary;

/**
 * 结点高度:结点到叶子节点的最长路径
 * 结点深度:跟结点到该结点边的个数
 * 结点层次:结点深度+1;
 * 树的高度:根结点的高度
 * 常见的二叉树:
 * 平衡二叉树
 * 二叉查找树
 * 平衡二叉树
 * B树:是多叉树,是根据二叉树演变而来
 */
public class BinaryTree {
    //数据结构定义
    //属性
    private char data;
    private BinaryTree left;
    private BinaryTree right;

    public char getData() {
        return data;
    }

    public void setData(char data) {
        this.data = data;
    }

    public BinaryTree getLeft() {
        return left;
    }

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

    public BinaryTree getRight() {
        return right;
    }

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

    //初始化对象
    public BinaryTree(char data, BinaryTree left, BinaryTree right) {
        this.data = data;
        this.left = left;
        this.right = right;
    }

    /**
     * 二叉树:
     *  每个结点至多有两颗子树
     *  第n个结点上最多有2^n-1个子树
     *  满二叉树:每个结点都有两颗子树
     *  完全二叉树:初最后一层外,其他的结点个数必须达到最大,并且最后一层结点都连续靠左排列
     *  满二叉树一定是完全二叉树;
     *  二叉树:
     *  设计树的存储结构? 是基于数组的存储结构,利用数组的下标
     *  二叉树用数组存?怎么存?
     *  二叉树遍历:
     *  根节点输出,子树以及递归中递和归的思想
     *  从根节点开始
     *  前序:   根 -左-右
     *  中序:   左  -根 -右
     *  后序:    左 -右 -根 (是不是存在三个结点进行判断)
     *  层次:
     *  前序 -中序-后序的区别是根节点所在的位置进行判断区分,存在子树就继续进行判断
     */

}

class TreeNode {
    //根节点输出
    public void print(BinaryTree tree) {
        System.out.println(tree.getData());
    }

    //前序遍历
    public void pre(BinaryTree tree) {
        print(tree);
        if (tree.getLeft() != null) {
            pre(tree.getLeft());   //认为是子树
        }
        if (tree.getRight() != null) {
            pre(tree.getRight());
        }
    }

    public void mid(BinaryTree tree) {
        if (tree.getLeft() != null) {
            pre(tree.getLeft());   //认为是子树
        }
        print(tree);
        if (tree.getRight() != null) {
            pre(tree.getRight());
        }
    }

    public void post(BinaryTree tree) {
        if (tree.getLeft() != null) {
            pre(tree.getLeft());   //认为是子树
        }
        if (tree.getRight() != null) {
            pre(tree.getRight());
        }
        print(tree);
    }

    public static void main(String[] args) {
        //优先建立子节点
//        BinaryTree binaryTree = new BinaryTree()
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值