用java实现二叉树

用java实现二叉树

import java.util.Arrays;
import java.util.Iterator;

public class TreeNode{
	public TreeNode left;
	public TreeNode right;
	public int value;
	public TreeNode(int value) {
		this.value=value;
	}
	public void add(int value) {//添加节点
		if(this.value<value) {
			if(right==null) {
				right=new TreeNode(value);
			}else {
				right.add(value);
			}
		}else {
			if(left==null) {
				left=new TreeNode(value);
			}else {
				left.add(value);
			}
		}
	}
	public boolean find(int value) {//查找
		if(value==this.value) {
			return true;
		}else if(value<this.value) {
			if(left==null) return false;
			else return left.find(value);
		}else {
			if(right==null) return false;
			else return right.find(value);
		}
	}
	public void preList() {//前序遍历
		System.out.print(" "+value);
		if(left!=null)  left.preList();
		if(right!=null)  right.preList();
	}
	public void middleList() {
		if(left!=null) left.middleList();
		System.out.print(" "+value);
		if(right!=null) right.middleList();
	}
	public void afterList() {
		if(left!=null) left.afterList();
		if(right!=null) right.afterList();
		System.out.print(" "+ value);
	}
	public static void main(String[] args) {
		//		int[] Node= {32,56,7,3,86,3,66,44};
		//		//在进行此调用之前,必须对数组进行排序(如sort(int[])方法)。 如果没有排序,索引结果是-Node.length。
		//		System.out.println(Arrays.binarySearch(Node, 32)); 
		//		Arrays.sort(Node);
		//		System.out.println(Arrays.toString(Node));
		//		//排序后,搜索键的索引,如果它包含在数组中; 否则, (-(insertion point) - 1) 。
		//		System.out.println(Arrays.binarySearch(Node, 78));	
		boolean flag=true;
		int[] Node=new int[8];
		for(int i=0;i<Node.length;i++) {
			int num=(int) (Math.random()*20);
			for(int j=0;j<i;j++) {//排除数组中重复数
				if(num==Node[j]) {
					flag=false;
					break;
				}
			}
			if(flag) Node[i]=num;
			else i--;flag=true;
		}
		System.out.println(Arrays.toString(Node));
		TreeNode tn=new TreeNode(Node[0]);
		
		for(int i=1;i<Node.length;i++) {
			tn.add(Node[i]);
		}

		System.out.println(tn.find(12));;
		System.out.println(tn.find(5));;
		tn.preList();
		System.out.println();
		tn.middleList();
		System.out.println();
		tn.afterList();
	}

}
二叉树是一种非常常见的数据结构,它由一个根节点和最多两个子节点组成,每个子节点也可以再有两个子节点,以此类推。下面是一个使用Java实现二叉树的示例代码。 ```java public class Node { int data; Node left, right; public Node(int item) { data = item; left = right = null; } } public class BinaryTree { Node root; public BinaryTree(int key) { root = new Node(key); } public BinaryTree() { root = null; } public void insert(int key) { root = insert(root, key); } private Node insert(Node root, int key) { if (root == null) { root = new Node(key); return root; } if (key < root.data) root.left = insert(root.left, key); else if (key > root.data) root.right = insert(root.right, key); return root; } public void inorder() { inorder(root); } private void inorder(Node root) { if (root != null) { inorder(root.left); System.out.print(root.data + " "); inorder(root.right); } } public static void main(String[] args) { BinaryTree tree = new BinaryTree(); tree.insert(50); tree.insert(30); tree.insert(20); tree.insert(40); tree.insert(70); tree.insert(60); tree.insert(80); tree.inorder(); } } ``` 在这个示例中,我们定义了一个`Node`类表示二叉树的节点,包括一个整型数据`data`和左右子节点`left`和`right`。我们还定义了一个`BinaryTree`类表示二叉树,包括一个根节点`root`和一些操作方法,如插入节点`insert`和中序遍历`inorder`。 在`insert`方法中,我们使用递归来插入新的节点。如果当前节点为`null`,则创建一个新节点。否则,将新节点与当前节点进行比较,如果小于当前节点,则插入到左子树中,否则插入到右子树中。最后,返回当前节点。 在`inorder`方法中,我们使用递归来进行中序遍历,即先遍历左子树,再访问当前节点,最后遍历右子树。在主方法中,我们创建一个二叉树并插入一些节点,然后进行中序遍历输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值