使用java实现二叉树结构

实现二叉树的添加数据,遍历输出

代码如下:

/**
 * 节点
 * @author Hzy
 *
 */
class Node{
	//左子节点
	Node leftNode;
	//右子节点
	Node rightNode;
	//中值
	Object value;
	
	/**
	 * 添加节点的方法
	 */
	public void add(Object v) {
		//如果当前添加值的节点没有值,将v赋值给value
		if (this.value == null) {
			this.value = v;
		} else {
			//如果当前有值,将值经过大小判断后赋值给对应的左右节点
			//赋值给左节点
			if (((Integer)v) - ((Integer)this.value) <= 0) {
				//判断左面有没有节点,如果没有就添加一个,然后再操作
				if (null == this.leftNode) {
					this.leftNode = new Node();
				}
				//递归调用
				this.leftNode.add(v);
			} else {
				//判断右面有没有节点,如果没有就添加一个,然后再操作
				if (null == this.rightNode) {
					this.rightNode = new Node();
				}
				//递归调用
				this.rightNode.add(v);
			}
			
		}
		
	}
	
	/**
	 * 中序遍历
	 */
	public List<Object> getNodes(){
		//定义一个存放元素的集合
		ArrayList<Object> values = new ArrayList<Object>();
		//左节点的遍历结果
		//如果没有左节点,就将所有的子节点装进values中
		if (null != this.leftNode) {
			values.addAll(this.leftNode.getNodes());
		}
		//当前节点的遍历
		values.add(this.value);
		//右节点的遍历
		if (null != this.rightNode) {
			values.addAll(this.rightNode.getNodes());
		}
		return values;
	}
}

测试二叉树:

/**
 * 实现二叉树
 * @author Hzy
 *
 */
public class Tree {
	public static void main(String[] args) {
		int[] nums = {66,8,33,56,78,89,23,45};
		
		//创建一个根节点
		Node roots = new Node();
		
		//添加值
		for (int num : nums) {
			roots.add(num);
		}
		//打印输出
		System.out.println(roots.getNodes());
		
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉树是一种非常常见的数据结构,它由一个根节点和最多两个子节点组成,每个子节点也可以再有两个子节点,以此类推。下面是一个使用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、付费专栏及课程。

余额充值