数据结构:二叉树构建与遍历(Java实现)

如下所示,是一个二叉树,从根节点开始,每个节点最多有两个子节点。

树是一种常见的数据结构,而二叉树又是一种特殊的树结构,这里介绍二叉树特点:

  • 每个节点最多有两个子节点
  • 节点的左子节点中的数据小于节点中的数据
  • 节点的右子节点中的数据大于节点中的数据

 这里给出一个由Java实现的二叉树:

package com.xxx.algorithm.tree;
public class BST {
	Node root = null;
	public void insert(int data){
		Node node = new Node(data);
		if(root==null){
			root = node;
		}else{
			Node curNode = root;
			Node parent = null;
			while(true){
				parent = curNode;
				if(data<curNode.data){
					curNode = curNode.left;
					if(curNode==null){
						parent.left = node;
						break;
					}
				}else{
					curNode = curNode.right;
					if(curNode==null){
						parent.right = node;
						break;
					}
				}
			}
		}	
	}
	
	public void inOrder(Node node){
		if(node!=null){
			inOrder(node.left);
			show(node);
			inOrder(node.right);
		}
	}
	
	public void preOrder(Node node){
		if(node!=null){
			show(node);
			preOrder(node.left);
			preOrder(node.right);
		}
	}
	
	public void postOrder(Node node){
		if(node!=null){
			postOrder(node.left);
			postOrder(node.right);
			show(node);
		}
	}
	
	public void show(Node node){
		System.out.print(node.data+" ");
	}
	
	public static void main(String[] args) {
		BST tree = new BST();
		tree.insert(20);
		tree.insert(10);
		tree.insert(50);
		tree.insert(18);
		tree.insert(13);
		tree.insert(7);
		tree.insert(6);
		tree.insert(8);
		tree.insert(19);
		tree.insert(55);
		tree.insert(23);
		tree.insert(21);
		tree.insert(75);
		tree.insert(52);
		tree.insert(40);
		System.out.println("preOrder:");
		tree.preOrder(tree.root);
		System.out.println();
		System.out.println("inOrder:");
		tree.inOrder(tree.root);	
		System.out.println();
		System.out.println("postOrder:");
		tree.postOrder(tree.root);
	}
	
	class Node{
		int data;
		Node left;
		Node right;
		public Node(int data){
			this.data = data;
			this.left = null;
			this.right = null;
		}
	}
}

这段代码通过insert(int data)方法成功构建了文章开始看到的二叉树。最终通过三种遍历方式,看到遍历结果如下:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值