基础算法系列 之树结构概述及简单实现

本文介绍了数据结构中的树和二叉树的基本概念,包括根结点、父结点、结点度、叶子结点、高度等。详细阐述了满二叉树和完全二叉树的定义,并提供了前序、中序和后序遍历的代码实现。通过实例展示了如何创建和操作二叉树节点。
摘要由CSDN通过智能技术生成

树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。

基础概念:
如图:(图片参考网络)
在这里插入图片描述
根结点:A即是根结点;
父结点(双亲结点):B即是E/F的父结点;
结点的度:结点的分支数量,即结点的子树数,如结点B下面有两个子树,所以度为2,同理A结点度为3,结点度的最大值即是树的度;
结点的权:指的是结点的权重;
叶子结点:没有子结点的结点;
高度:最大的层数,例如上面树的高度为4;
二叉树:任何一个结点的子结点数量<=2,子结点分为左结点和右节点,左右结点不可以随意颠倒位置;
满二叉树:所有叶子结点都在最后一层,且结点总数为2的n次方-1;
完全二叉树:所有叶子结点都在最后一层或者倒数第二层,且最后一层的叶子结点在左边连续,倒数第二层在右边连续;
满二叉树一定是完全二叉树;
前序遍历:自己—左树—右树 A-B-E-K-L-F-C-G-D-H-M-I-J
中序遍历:左树—自己—右树 ~
后序遍历:左树—右树—自己 ~

代码实现:

public class TreeNode{	//结点类
	int value;
	TreeNode left;
	TreeNode right;
	public TreeNode(int value){
		this.value=value;
	}
	public void setlnode(TreeNode left){
		this.left=left;
	}
	public void setrnode(TreeNode right){
		this.right=right;
	}
	public void frontshow(){
		System.out.println(value);
		if(left!=null){
			left.frontshow();
		}
		f(right!=null){
			right.frontshow();
		}
	}
	public TreeNode frontSearch(int i){
		if(this.value==i){
			return this;
		}else{
			if(left!=null)
				TreeNode target=left.frontSearch(i);
			if(target!=null)
				return target;
			if(left!=null)
				TreeNode target=right.frontSearch(i);	
			return target;
		}
	}
	public void delete(int i){
		TreeNode parent=this;
		if(parent.left.value==i){
			parent.left=null;
			return;
		}
		if(parent.right.value==i){
			parent.right=null;
			return;
		}
		parent=left;
		if(parent!=null)
			parent.delete(i);
		parent=right;
		if(parent!=null)
			parent.delete(i);
	}
}

public class BinaryTree{  //创建根结点
	TreeNode root;
	public void setRoot(TreeNode root){
		this.root=root;
	}
	public TreeNode getRoot(){
		return root;
	}
	public void frontshow(){
		root.frontshow();
	}
	public TreeNode frontSearch(int i){
		return root.frontSearch(i);
	}
	public void delete(int i){
		if(root.value==i)
			root=null;
		else
			root.delete(i);
	}
}

public class TestBinaryTree{
	public static void main(String[]args){
		BinaryTree binTree=new BinaryTree;  //空树
		TreeNode root=new TreeNode(1);  //根结点
		binTree.setRoot(root);
		TreeNode rootL=new TreeNode(2);
		root.setlnode(rootL);
		TreeNode rootR=new TreeNode(3);
		root.setrnode(rootR);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值