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() } }
树论基本操作-建立二叉树以及相关概念
最新推荐文章于 2023-04-24 18:36:18 发布