二叉树的定义:每个节点最多有2个子节点。
二叉树的子节点分为左节点和右节点。
1 节点 比如A B C都可以叫做节点。
2 根节点 比如A就是根节点。
3 父节点 比如A是B的父节点。
4 字节点 比如B是A的子节点。
5 叶子节点(没有子节点的节点)
6 节点的权 (节点内所存储的值)
7 子树 比如DH是D作为根节点的子树。
8 树的高度(最大的层数)
9 满二叉树 每层的节点都满了
10 完全二叉树 最后一层节点靠右边,剩下的节点都满了。
public class Test {
public static void main(String[] args){
//首先创造一个二叉树。
BinaryTree bt =new BinaryTree();
//创造节点
Person root = new Person(1,"宋江");
Person p2 = new Person(2,"小江");
Person p3 = new Person(3,"傻江");
Person p4 = new Person(4,"杀");
root.left = p2;
root.right = p3;
p3.right=p4;
bt.root = root;
System.out.println("--------前序遍历---------");
bt.list1();
System.out.println("--------中序遍历---------");
bt.list2();
System.out.println("--------后序遍历---------");
bt.list3();
}
}
class BinaryTree {
static Person root;
//前序遍历
public void list1(){
if(this.root!=null){
this.root.list1();
}
else{
System.out.println("当前二叉树为空,无法遍历");
}
}
//中序遍历
public void list2(){
if(this.root!=null){
this.root.list2();
}
else{
System.out.println("当前二叉树为空,无法遍历");
}
}
//后序遍历
public void list3(){
if(this.root!=null){
this.root.list3(); //此处的list()方法是Person类中的方法。
}
else{
System.out.println("当前二叉树为空,无法遍历");
}
}
}
class Person {
int id ;
String name;
Person left;
Person right;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
//定义一个前序遍历的方法。
public void list1(){
//首先输出根节点
System.out.println(this.id+" "+this.name);
//向左子树遍历
if(this.left!=null){
this.left.list1();
}
if(this.right!=null){
this.right.list1();
}
}
//定义一个中序遍历的方法。
public void list2(){
if(this.left!=null){
this.left.list2();
}
//输出根节点。
System.out.println(this.id+" "+this.name);
if(this.right!=null){
this.right.list2();
}
}
//定义一个后序遍历的方法。
public void list3(){
if(this.left!=null){
this.left.list3();
}
if(this.right!=null){
this.right.list3();
}
//输出当前的根节点
System.out.println(this.id+" "+this.name);
}
}
三分钟无脑学会二叉树遍历手工算法