二叉树数据结构

 

一个节点可以有多个下级节点,但只有一个上级节点

 

 

二叉树:

一个节点可以有不多于两个的下级节点,但只有一个上级节点



 

完全二叉树

满二叉树

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);

	}

 

 

后序遍历(左-右-根);

左左

左右

右左

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值