树结构之二叉树——普通二叉树

在数据结构中,树结构算是最重要的一种结构之一,从文件系统到网络结构,无处不存在着树结构的身影。在树结构中,二叉树又是其中最常用的结构,其重要性不言而喻。


一、定义

二叉树的定义是:每个节点至多有两个子树,并且二叉树的子树有左右之分,其次序不能任意颠倒【数据结构——严蔚敏】。从代码上看,二叉树的节点包括左右子树和本节点的值,那么可定义如下:

public class TNode{
		public int value;//节点值
		public TNode left;//左节点
		public TNode right;//右节点
	}



二、基本操作

二叉树中的基本操作包括:创建二叉树、遍历二叉树(前序、中序、后序)和求二叉树的高度。

创建二叉树:

public TNode create(TNode t){
		if(t==null) t=new TNode();
		System.out.println("Input a number:");
		Scanner sc=new Scanner(System.in);
		int data=sc.nextInt();
		if(data==0){
			return null;
		}else{
			t.value=data;
			t.left=create(t.left);
			t.right=create(t.right);
		}		
		return t;
	}


遍历二叉树:

//前序遍历
	public void preTree(TNode tree){
		if(tree==null) return;
		
		System.out.println("node="+tree.value);
		
		if(tree.left!=null) preTree(tree.left);
		if(tree.right!=null) preTree(tree.right);		
	}
	
	//中序遍历
	public void midTree(TNode tree){
		if(tree==null) return;
		
		if(tree.left!=null) midTree(tree.left);
		
		System.out.println("node="+tree.value);
		
		if(tree.right!=null) midTree(tree.right);
	}
	
	//后序遍历
	public void postTree(TNode tree){
		if(tree==null) return;
		
		if(tree.left!=null) postTree(tree.left);
		if(tree.right!=null) postTree(tree.right);
		
		System.out.println("node="+tree.value);
	}

求二叉树的高度:

//求二叉树的高度
	public int getHeight(TNode t){
		if(t==null) return 0;
		if(t.left==null && t.right==null){
			return 1;
		}
		int left_h=getHeight(t.left);
		int right_h=getHeight(t.right);
		return left_h>right_h?left_h+1:right_h+1;
	}



三、综合实例代码

package org.xizi.tree.binarytree;

import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class BinaryTree {
	//树节点
	public class TNode{
		public int value;//节点值
		public TNode left;//左节点
		public TNode right;//右节点		
	}
	
	private TNode root;
	
	//构造树	
	public TNode create(TNode t){
		if(t==null) t=new TNode();
		System.out.println("Input a number:");
		Scanner sc=new Scanner(System.in);
		int data=sc.nextInt();
		if(data==0){
			return null;
		}else{
			t.value=data;
			t.left=create(t.left);
			t.right=create(t.right);
		}		
		return t;
	}
	
	//求二叉树的高度
	public int getHeight(TNode t){
		if(t==null) return 0;
		if(t.left==null && t.right==null){
			return 1;
		}
		int left_h=getHeight(t.left);
		int right_h=getHeight(t.right);
		return left_h>right_h?left_h+1:right_h+1;
	}

	
	//前序遍历
	public void preTree(TNode tree){
		if(tree==null) return;
		
		System.out.println("node="+tree.value);
		
		if(tree.left!=null) preTree(tree.left);
		if(tree.right!=null) preTree(tree.right);		
	}
	
	//中序遍历
	public void midTree(TNode tree){
		if(tree==null) return;
		
		if(tree.left!=null) midTree(tree.left);
		
		System.out.println("node="+tree.value);
		
		if(tree.right!=null) midTree(tree.right);
	}
	
	//后序遍历
	public void postTree(TNode tree){
		if(tree==null) return;
		
		if(tree.left!=null) postTree(tree.left);
		if(tree.right!=null) postTree(tree.right);
		
		System.out.println("node="+tree.value);
	}
	
	public static void main(String[] args){
		BinaryTree bt=new BinaryTree();
		bt.root=bt.create(bt.root);
		bt.postTree(bt.root);
		System.out.println("Height="+bt.getHeight(bt.root));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值