树
一个节点可以有多个下级节点,但只有一个上级节点
二叉树:
一个节点可以有不多于两个的下级节点,但只有一个上级节点
完全二叉树
满二叉树
B树
B+树
B-树
二叉树的遍历方式:
先序遍历 中序遍历 后序遍历
JAVA实现二叉树的代码;
package com.Tree.com;
/**
* 定义树
* @author Administrator
*
*/
public class TreeNode {
//树
Object obj;
TreeNode parent;//父节点
TreeNode leftnode;//左子节点
TreeNode rightnode;//右子节点
public TreeNode(Object obj){
this.obj = obj;
}
@Override
public String toString(){
return (String)obj;
}
}
树的构建关系及遍历二叉树的三种方式,代码如下;
package com.Tree.com;
//树
public class tree {
public TreeNode creatNode() {
// 创建节点
TreeNode root = new TreeNode("根");
TreeNode root1 = new TreeNode("左");
TreeNode root2 = new TreeNode("右");
TreeNode root3 = new TreeNode("左左");
TreeNode root4 = new TreeNode("左右");
TreeNode root5 = new TreeNode("右左");
root.leftnode = root1;
root.rightnode = root2;
root1.parent = root;
root2.parent = root;
//root1父节点的左边和右边的节点
root1.leftnode = root3;
root1.rightnode = root4;
//root3和root4都是root1的子节点
root3.parent = root1;
root4.parent = root1;
//root2左边的节点是root5,root5的父节点是root3
root2.leftnode = root5;
root5.parent = root3;
return root;
}
二叉树的先序遍历方式
// 先序遍历的方法
public void TreePrint(TreeNode root) {
//遍历根节点
System.out.println(root);
//遍历左子节点
TreeNode left = root.leftnode;
//判断左边是否为空
if (left != null) {
//递归
TreePrint(left);
}
//遍历右子节点
TreeNode right = root.rightnode;
//判断右边是否为空
if (right != null) {
//递归
TreePrint(right);
}
}
//打印二叉树
public static void main(String[] args) {
tree tr = new tree();
//创建节点的关系
TreeNode root = tr.creatNode();
//打印输出节点
tr.TreePrint(root);
}
}
运行结果(先序遍历)输出 根-左-右:
根
左
左左
左右
右
右左
//中序遍历
public void TreePrint(TreeNode root) {
//遍历左子节点
TreeNode left = root.leftnode;
//判断左边是否为空
if (left != null) {
//递归
TreePrint(left);
}
//遍历根节点
System.out.println(root);
//遍历右子节点
TreeNode right = root.rightnode;
//判断右边是否为空
if (right != null) {
//递归
TreePrint(right);
}
}
输出结果(左-中-右):
左左
左
左右
根
右左
右
//后续遍历
public void TreePrint(TreeNode root) {
//遍历左子节点
TreeNode left = root.leftnode;
//判断左边是否为空
if (left != null) {
//递归
TreePrint(left);
}
//遍历右子节点
TreeNode right = root.rightnode;
//判断右边是否为空
if (right != null) {
//递归
TreePrint(right);
}
//遍历根节点
System.out.println(root);
}
后序遍历(左-右-根);
左左
左右
左
右左
右
根