标签:comm 插入 key sea head nod alt 一个 abs
满二叉树:除最后一层外,每一层上的所有节点都有两个子节点,最后一层都是叶子节点。
哈夫曼树:给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。
二叉排序树:又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
左、右子树也分别为二叉排序树;
没有键值相等的节点
二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)(相当于顺序查找)
平衡二叉树:又称 AVL 树。平衡二叉树是二叉搜索树的进化版,所谓平衡二叉树指的是,左右两个子树的高度差的绝对值不超过 1。
红黑树:红黑树是每个节点都带颜色的树,节点颜色或是红色或是黑色,红黑树是一种查找树。红黑树有一个重要的性质,从根节点到叶子节点的最长的路径不多于最短的路径的长度的两倍。对于红黑树,插入,删除,查找的复杂度都是O(log N)。
package tree;
?
public class TreeNode<T> {
?
public TreeNode left;
public TreeNode right;
public T val;
?
public TreeNode(T val) {
this.val = val;
}
?
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;
}
?
public T getVal() {
return val;
}
?
public void setVal(T val) {
this.val = val;
}
}
递归解法: (1)如果二叉树为空,节点个数为0 (2)如果不为空,二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1
public static int handler(TreeNode node){
if (node == null){
return 0;
}
return handler(node.left)+handler(node.right)+1;
}
递归解法: (1)如果二叉树为空,二叉树的深度为0 (2)如果二叉树不为空,二叉树的深度 = max(左子树深度, 右子树深度) + 1
public static int getMax(TreeNode node){
if (node == null){
return 0;
}
return Math.max(getMax(node.right), getMax(node.left))+1;
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
if (root == null){
return 0;
}
if (root.right == null&& root.left == null){
return 1;
}
int min = Integer.MAX_VALUE;
if (root.left != null){
min = Math.min(minDepth(root.left), min);
}
if (root.right != null){
min = Math.min(minDepth(root.right), min);
}
return min+1;
}
}
?
标签:comm 插入 key sea head nod alt 一个 abs
原文地址:https://www.cnblogs.com/z-jx/p/11581646.html