二叉树基本概念:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点+左子树的二叉树+右子树的二叉树组成。
二叉树的特点:
1、每个节点最多有两棵子树,即二叉树的结点的度不大于2。
2、二叉树的子树有左右之分,其子树的次序不能颠倒,因此二叉树是有序树。
树的度:一棵树中,最大的节点的度称为树的度
叶子结点:度为0的结点称为叶节点,如上图的:1、3 、 5 为叶节点
双亲节点或父节点:若一个结点含有子节点,则这个结点称为其子节点的父节点,如上图的:4是2和6的父节点
孩子结点或子节点:一个节点含有子树的根节点称为该节点的子节点,如上图的:2,6是4的子节点
根节点:一棵树中,没有双亲节点的结点,如上图的:4
结点的层次:从根开始定义起,根节点为第一层,根的子节点为第2层,以此类推,如上图的:4在第一层,1在第三层
树的高度或深度:树中节点的最大层数
兄弟结点:具有相同的父节点的结点互称为兄弟结点,如2和6为兄弟结点,1和3为为兄弟结点
树的结点采用孩子兄弟表示法。
class TreeNode {
int val;
TreeNode leftChild;
TreeNode rightChild;
public TreeNode(int val) {
this.val=val;
}
}
public class BuildTree {
public static TreeNode buildTree() {
//构建二叉树,返回根节点的引用
// 先构造结点,
TreeNode a = new TreeNode('4');
TreeNode b = new TreeNode('2');
TreeNode c = new TreeNode('6');
TreeNode d = new TreeNode('1');
TreeNode e = new TreeNode('3');
TreeNode f = new TreeNode('5');
a.leftChild = b;
a.rightChild = c;
b.leftChild = d;
b.rightChild = e;
c.leftChild = f;
c.rightChild = null;
d.leftChild = null;
d.rightChild = null;
e.leftChild = null;
e.rightChild = null;
f.leftChild = null;
f.rightChild = null;
return a;
}
private static int leaftn;//记录叶子结点个数
private static int leaftNodeSize(TreeNode root){
//求叶子节点个数
leaftn=0;
preOder(root);//从根结点出发,开始寻找叶子结点
return leaftn;
}
private static void preOder(TreeNode root) {
if(root!=null){
if(root.leftChild==null&&root.rightChild==null) {
//当一个节点的左右孩子均为null,则说明他是叶子结点
leaftn++;
}
//递归调用,遍历结点的左右子树部分,寻找叶子结点
preOder(root.leftChild);
preOder(root.rightChild);
}
}
public static void main(String[] args) {
TreeNode root=buildTree();
System.out.println("此二叉树的叶子结点共有"+leaftNodeSize(root)+"个。");
}
}