二叉树
Posted z-jx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树相关的知识,希望对你有一定的参考价值。
二叉树的概念
满二叉树:除最后一层外,每一层上的所有节点都有两个子节点,最后一层都是叶子节点。
哈夫曼树:给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。
二叉排序树:又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
-
若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
-
若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
-
左、右子树也分别为二叉排序树;
-
没有键值相等的节点
二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)(相当于顺序查找)
平衡二叉树:又称 AVL 树。平衡二叉树是二叉搜索树的进化版,所谓平衡二叉树指的是,左右两个子树的高度差的绝对值不超过 1。
红黑树:红黑树是每个节点都带颜色的树,节点颜色或是红色或是黑色,红黑树是一种查找树。红黑树有一个重要的性质,从根节点到叶子节点的最长的路径不多于最短的路径的长度的两倍。对于红黑树,插入,删除,查找的复杂度都是O(log N)。
0.树
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. 求二叉树中的节点个数
递归解法: (1)如果二叉树为空,节点个数为0 (2)如果不为空,二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1
public static int handler(TreeNode node)
if (node == null)
return 0;
return handler(node.left)+handler(node.right)+1;
2. 求二叉树的最大层数(最大深度)
递归解法: (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;
3.二叉树的最小深度
/**
* 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;
4.后序遍历
?
以上是关于二叉树的主要内容,如果未能解决你的问题,请参考以下文章