二叉树(java版)

//节点类
package com.huowolf.test2;

public class Node {
		private int keyData;		//关键字
		
		private int otherData;	//其他数据
		
		private Node leftNode;		//左子节点
		
		private Node rightNode;	//右子节点

		public Node(int keyData, int otherData) {
			this.keyData = keyData;
			this.otherData = otherData;
		}

		public int getKeyData() {
			return keyData;
		}

		public void setKeyData(int keyData) {
			this.keyData = keyData;
		}

		public int getOtherData() {
			return otherData;
		}

		public void setOtherData(int otherData) {
			this.otherData = otherData;
		}

		public Node getLeftNode() {
			return leftNode;
		}

		public void setLefNode(Node leftNode) {
			this.leftNode = leftNode;
		}

		public Node getRightNode() {
			return rightNode;
		}

		public void setRightNode(Node rightNode) {
			this.rightNode = rightNode;
		}
		
		//显示方法
		public void display() {
			System.out.println(keyData+", "+otherData);
		}
		
}
package com.huowolf.test2;

public class Tree {
		private Node root;

		public Node getRoot() {
			return root;
		}
		
		//插入方法
		public void insert(int keyData, int otherData) {
			Node newNode = new Node(keyData, otherData);
			
			if(root == null) {
				root = newNode;
			}else {
				Node current = root;
				Node parent;	//保存当前节点的父节点的引用
				while(true) {
					parent = current;
					if(keyData < current.getKeyData())  {
						current = current.getLeftNode();
						if(current == null) {
							parent.setLefNode(newNode);
							return;
						}
					} else {
						current = current.getRightNode();
						if(current == null) {
							parent.setRightNode(newNode);
							return;
						}
					}
				}
			}
		}
		
		//查找方法
		public Node find(int keyData) {
			Node current = root;
			while(current.getKeyData() != keyData) {
				if(keyData < current.getKeyData()) {
					current = current.getLeftNode();
				} else {
					current = current.getRightNode();
				}
				if(current == null) {
					return null;
				}
			}
			return current;
		}
		
		//修改方法
		public void change(int keyData, int newOtherData) {
			Node findNode = find(keyData);
			findNode.setOtherData(newOtherData);
		}
		
		//先序遍历
		public void  preOrder(Node node) {
				if(node != null) {
					node.display();
					preOrder(node.getLeftNode());
					preOrder(node.getRightNode());
				}
		}
		
		//中序遍历
		public void  inOrder(Node node) {
			if(node != null) {
				inOrder(node.getLeftNode());
				node.display();
				inOrder(node.getRightNode());
			}
		}
		
		//后序遍历
		public void postOrder(Node node) {
			if(node != null) {
				postOrder(node.getLeftNode());
				postOrder(node.getRightNode());
				node.display();
			}
			
		}
}

//测试类
package com.huowolf.test2;

public class Tree_Test {

	public static void main(String[] args) {
		Tree tree = new Tree();
		tree.insert(80, 75);
		tree.insert(49, 49);
		tree.insert(42, 42);
		tree.insert(30, 30);
		tree.insert(45,45);
		tree.insert(150, 110);
		tree.insert(90, 90);
		tree.insert(130, 130);
		tree.insert(82,86);
		
		//修改结点
		tree.change(90, 92);
		Node findNode = tree.find(90);
		findNode.display();
		
		System.out.println("先序遍历:");
		tree.preOrder(tree.getRoot());
		System.out.println("-------------------------");
		
		System.out.println("中序遍历:");
		tree.inOrder(tree.getRoot());
		System.out.println("-------------------------");
		
		System.out.println("后序遍历:");
		tree.postOrder(tree.getRoot());
	}
	
	

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值