二叉树的查找和遍历
- 树的定义:树是n个结点的有限集。若n = 0,称为空树;若n > 0,则有且仅有一个特定称为根的结点,其余结点可以称为根的子树。
- 基本术语:
根结点:非空树中无前驱结点的结点(A)。
结点的度:结点拥有的子树数(A结点的度为3)。
树的度:树内各结点的度的最大值。
叶子结点(终端结点):度为0。
分支结点(非终端结点):度不为0,且根结点以外的分支结点称为内部结点。
孩子和双亲:结点的子树的根称为该结点的孩子,该结点称为孩子的双亲(A结点有三棵子树,三棵子树的根结点分别为B,C,D,则B,C,D为A结点的孩子,A结点为B,C,D的双亲)。
兄弟结点:有共同的双亲(H,I,J)。
堂兄弟:双亲在同一层的结点(G,H)。
结点的祖先:从根到该结点所经分支上的所有结点。
结点的子孙:以某结点为根的子树中的任一结点。
树的深度:树中结点的最大层次(4)。
有序树:树中结点的各子树从左至右有次序(最左边的为第一个孩子)。
无序树:树中结点的各子树无次序。
森林:m(m>0)棵互不相交的树的集合
把根结点删除,树就变为森林。一棵树可以看成是一个特殊的森林,给森林中的各子树加上一个双亲结点,森林就变成了树。
所以:树一定是森林,森林不一定是树。
-
二叉树的定义:二叉树是n(n大于等于0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。
学习二叉树的原因:多叉树的运算都是在转化为二叉树的基础上实现的。 -
特点:
1.每个结点最多有俩孩子(二叉树中不存在度大于2的结点)。
2.子树有左右之分,次序不能颠倒。
3.二叉树可以是空集合,根可以有空的左子树和空的右子树。
通过有左右之分的树区别二叉树和普通树。
-
完全二叉树和满二叉树:
-
二叉树的前序中序后序遍历(根据父结点的输出顺序决定)
定义二叉树:
class BinaryTree {
private HeroNode root;
public void setRoot(HeroNode root) {
this.root = root;
}
}
具体结点类:
private int no;
private String name;
private HeroNode left;
private HeroNode right;
public HeroNode(int no, String name) {
this.no = no;
this.name = name;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HeroNode getLeft() {
return left;
}
public void setLeft(HeroNode left) {
this.left = left;
}
public HeroNode getRight() {
return right;
}
public void setRight(HeroNode right) {
this.right = right;
}
前序遍历:先输出父结点,再遍历左子树和右子树
代码实现:
在结点类中实现具体的方法,或者可以在树中实现,但是需要传递结点参数。
public void</