二叉树的java实现(2)

引子

承接我的上一篇博客 传送门

查询

二叉树的遍历分为前序遍历,中序遍历后序以及层级遍历,那么自然对于节点的查询也分为前序,中序,后序以及层次。

前序查询

修改BinaryTree

//BinaryTree
public Node frontGetNodeByValue(int value) {
		if(this.rootNode == null) return null;
		return this.rootNode.frontGetNodeByValue(value);
}
//Node
public Node frontGetNodeByValue(int value) {
			Node targetNode = null;
			if(this.getValue() == value) return this;
			if(this.getLeftNode() != null)  targetNode = this.getLeftNode().frontGetNodeByValue(value);
			if(targetNode != null) return targetNode;
			if(this.getRightNode() != null)  targetNode = this.getRightNode().frontGetNodeByValue(value);
			return targetNode;
		}

测试

@Test
	void testFrontGetNode() {
		BinaryTree tree = new BinaryTree();
		Node rootNode = new BinaryTree.Node(1);
		Node leftNode = new BinaryTree.Node(2);
		Node rightNode = new BinaryTree.Node(3);
		Node node4 = new BinaryTree.Node(4);
		Node node5 = new BinaryTree.Node(5);
		Node node6 = new BinaryTree.Node(6);
		Node node7 = new BinaryTree.Node(7);
		tree.addNode(rootNode);
		tree.addNode(leftNode);
		tree.addNode(rightNode);
		tree.addNode(node4);
		tree.addNode(node5);
		tree.addNode(node6);
		tree.addNode(node7);
		System.out.println(tree.frontGetNodeByValue(7));
	}

结果
在这里插入图片描述

中序查询

修改BinaryTree

//BinaryTree
public Node centerGetNodeByValue(int value) {
		if(this.rootNode == null) return null;
		return this.rootNode.centerGetNodeByValue(value);
	}
//Node
public Node centerGetNodeByValue(int value){
			Node targetNode = null;
			if(this.getLeftNode() != null)  targetNode = this.getLeftNode().centerGetNodeByValue(value);
			if(targetNode != null) return targetNode;
			if(this.getValue() == value) return this;
			if(this.getRightNode() != null)  targetNode = this.getRightNode().centerGetNodeByValue(value);
			return targetNode;
		}

测试

@Test
	void testCenterGetNode() {
		BinaryTree tree = new BinaryTree();
		Node rootNode = new BinaryTree.Node(1);
		Node leftNode = new BinaryTree.Node(2);
		Node rightNode = new BinaryTree.Node(3);
		Node node4 = new BinaryTree.Node(4);
		Node node5 = new BinaryTree.Node(5);
		Node node6 = new BinaryTree.Node(6);
		Node node7 = new BinaryTree.Node(7);
		tree.addNode(rootNode);
		tree.addNode(leftNode);
		tree.addNode(rightNode);
		tree.addNode(node4);
		tree.addNode(node5);
		tree.addNode(node6);
		tree.addNode(node7);
		System.out.println(tree.centerGetNodeByValue(7));
	}

结果
在这里插入图片描述

后序查询

修改BinaryTree

//BinaryTree
public Node lastGetNodeByValue(int value) {
		if(this.rootNode == null) return null;
		return this.rootNode.lastGetNodeByValue(value);
	} 
//Node
public Node lastGetNodeByValue(int value) {
			Node targetNode = null;
			if(this.getLeftNode() != null)  targetNode = this.getLeftNode().lastGetNodeByValue(value);
			if(targetNode != null) return targetNode;
			if(this.getRightNode() != null)  targetNode = this.getRightNode().lastGetNodeByValue(value);
			if(targetNode != null) return targetNode;
			if(this.getValue() == value) return this;
			return targetNode;
		}

测试

@Test
	void testLastGetNode() {
		BinaryTree tree = new BinaryTree();
		Node rootNode = new BinaryTree.Node(1);
		Node leftNode = new BinaryTree.Node(2);
		Node rightNode = new BinaryTree.Node(3);
		Node node4 = new BinaryTree.Node(4);
		Node node5 = new BinaryTree.Node(5);
		Node node6 = new BinaryTree.Node(6);
		Node node7 = new BinaryTree.Node(7);
		tree.addNode(rootNode);
		tree.addNode(leftNode);
		tree.addNode(rightNode);
		tree.addNode(node4);
		tree.addNode(node5);
		tree.addNode(node6);
		tree.addNode(node7);
		System.out.println(tree.lastGetNodeByValue(7));
	}

结果
在这里插入图片描述

层次查询

修改BinaryTree

//BinaryTree
public Node GetNodeByValue(int value) {
		if(this.rootNode == null) return null;
		return GetNode(value);
	} 	
private Node GetNode(int value) {
		LinkedList<Node> list = new LinkedList<>();
		list.offer(rootNode);
		Node currNode = null;
		while(!list.isEmpty())
		{
			Node  node = list.poll();
			if(node.getValue() == value) 
			{
				currNode = node;
				break;
			}
			if(node.getLeftNode() != null) list.offer(node.getLeftNode());
			if(node.getRightNode() != null) list.offer(node.getRightNode());
		}
		return currNode;
	}

测试

@Test
	void testGetNode() {
		BinaryTree tree = new BinaryTree();
		Node rootNode = new BinaryTree.Node(1);
		Node leftNode = new BinaryTree.Node(2);
		Node rightNode = new BinaryTree.Node(3);
		Node node4 = new BinaryTree.Node(4);
		Node node5 = new BinaryTree.Node(5);
		Node node6 = new BinaryTree.Node(6);
		Node node7 = new BinaryTree.Node(7);
		tree.addNode(rootNode);
		tree.addNode(leftNode);
		tree.addNode(rightNode);
		tree.addNode(node4);
		tree.addNode(node5);
		tree.addNode(node6);
		tree.addNode(node7);
		System.out.println(tree.GetNodeByValue(7));
	}

结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值