目录
2.对于有n个结点的完全二叉树,如果按照从上到下,从左至右的顺序对所有的结点进行编号,则对于序号为i的结点:
一、二叉树的遍历
1. 二叉树的遍历可分为四种:
前序、中序和后序遍历均要用到栈。
前序遍历(preOrder):给定一个二叉树,先访问根,再遍历左子树,最后再遍历右子树。,
public void preOrder(Node root) {
if (root == null) {
return;
}
System.out.println(root.val+"");
preOrder(root.left);
preOrder(root.ringt);
}
中序遍历:先遍历左子树,再访问根,再遍历右子树。
/**
* 传入一个二叉树的根节点。根据中序遍历访问二叉树
* 先左后根最后在右
*/
public void inOrder(Node root) {
if (root == null) {
return;
}
inOrder(root.left);
System.out.println(root.val+"");
inOrder(root.ringt);
}
后序遍历:先遍历左子树,再遍历右子树,再访问根。
/**
* 传入一个二叉树的根节点root,以后序遍历访问二叉树
* 先左后右最后在根
*/
public void postOrder(Node root) {
if (root == null) {
return;
}
preOrder(root.left);
preOrder(root.ringt);
System.out.println(root.val+"");
}
层序遍历:按照从上到下、从左到右的次序进行遍历。先遍历完一层,再遍历下一层。该遍历要用到队列。
二、二叉树节点的性质
二叉树中有两种特殊的二叉树:
满二叉树:如果一个二叉树每一层的结点数都达到最大值,那么这个二叉树称为满二叉树。即一个二叉树的层数为k,且结点数为2^k - 1,则它为满二叉树。
完全二叉树:它是由满二叉树引出来的。如果有一个深度为k的,有n个结点的二叉树,当且仅当其中每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时,称其为完全二叉树。(堆就是一个完全二叉树)