数据结构学习成果二叉树部分分享:
此博客内容目录:
树
基本概念
树是n(n>=0)个结点的有限集,当n=0时,称为空树。
图解:
1.结点A称为‘根’,一棵树中有且只有一个 根,即为该树的根节点。
2.树是一种递归的数据结构,每一个结点都可以形成以他为根节点的子树。
3.与结点A直接相连的结点B、C、D为后继结点,又称为结点A的孩子,结点A是他们的父亲。
4.结点B、C、D互为彼此的兄弟结点,自然结点F与结点H互为堂兄弟。
5.从根A到结点K的唯一路上的任意结点,称为结点K的祖先,例如结点B是结点K的祖先,自然结点K是结点B的子孙。
6.没有孩子的结点称为树叶
7.树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度。
8.树的高度(或深度)是树中结点的最大层数。
9.树的宽度是具有最多结点数的层中包含的结点数。
10.两个结点之间所经过的结点序列构成路径,树中的路径是从上到下的,同一父亲的两个孩子之间不存在路径。
森林是m(m>=0)棵互不相交的树的集合。
基本实现
class TreeNode{
Object element;
TreeNode parent;
List<TreeNode> children;
public TreeNode(Object element){
this.element = element;
this.parent = new TreeNode();
this.children = new Linkedlist<TreeNode>();
}
}
二叉树
基本概念
二叉树即为一棵每个结点都不能有多于两个孩子的特殊类型的树。
图像:
特性:
二叉树是有序树,即区分左子树和右子树,若左、右子树颠倒,则成为另一棵不同的二叉树。
基本实现
class TreeNode {
int value;
TreeNode left;
TreeNode right;
public TreeNode(int data) {
left = null;
right = null;
this.value = data;
}
}
特殊二叉树
1.满二叉树
树中的每层都含有最多的结点
图解:
代码:判断一棵二叉树是否为满二叉树
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(7);
System.out.println(isFull(root)); //true
}
public static class ReturnData{
public int height; //高度
public int nodes; //结点数
public ReturnData(int h,int n){
height = h;
nodes = n;
}
}
public static boolean isFull(TreeNode root){
if (root==null){
return true;
}
ReturnData data = process(root);
//return data.nodes == (1<< data.height)-1;
return data.nodes == Math.pow(2,data.height)-1;
}
public static ReturnData process(TreeNode root){
if (root==null){
return new ReturnData(0,0);
}
ReturnData leftData = process(root.left);
ReturnData rightData = process(root.right);
int height =