java实现逆序打印二叉排序树中比某个节点大的值
2021/11/19 22:10:28
本文主要是介绍java实现逆序打印二叉排序树中比某个节点大的值,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
描述:假设目标节点值是6
打印结果:
10 9 8 6
二叉排序树的实现在这里不解释了,我有一博客写的就是实现二叉排序树。
这里解释一下怎么递归实现该功能,假设该节点在树中:
1.首先判断当前节点是否为空,如果为空,结束;否则向右递归遍历,遍历方式采用先右后中,最后向左递归,遍历方式恰好和中序遍历相反
2.当递归过程中发现当前节点值与目标节点值相同,向右递归遍历,当递归结束返回到目标节点时,打印当前值,结束函数
下面是实现代码:
//右中左的中序遍历 //TreeNode中的方法 public void newMidOrder(T data) { if(this.right != null) { this.right.newMidOrder(data); } if(this.data.compareTo(data) > 0) { System.out.print(this.data + " "); }else if(this.data.compareTo(data) == 0){ System.out.print(this.data); return; } if(this.left != null) { this.left.newMidOrder(data); } }
//BinaryTree中的方法 //右中左遍历 public void newMidOrder(T data) { if(this.root != null) { this.root.newMidOrder(data); }else { System.out.println("当前二叉树为空,请先创建二叉树"); } }
完整代码:
package colllection_2; import java.util.Scanner; public class BTTest { public static void main(String[] args) { BinaryTree<Integer> binaryTree = new BinaryTree<Integer>(); Scanner scan = new Scanner(System.in); int number = scan.nextInt(); for(int i = 0;i < number;i++) { int data = scan.nextInt(); binaryTree.add(new TreeNode<Integer>(data)); } int targerData = scan.nextInt(); binaryTree.newMidOrder(Integer.valueOf(targerData)); } } //二叉树 class BinaryTree<T extends Comparable<T>>{ private TreeNode<T> root; public BinaryTree() { } public void setRoot(TreeNode<T> root) { this.root = root; } public TreeNode<T> getRoot(){ return this.root; } //增加节点 public void add(TreeNode<T> node) { if(root == null) { root = node; }else { root.add(node); } } //前序遍历 public void preOrder() { if(this.root != null) { this.root.preOrder(); }else { System.out.println("当前二叉树为空,请先创建二叉树!!"); } } //中序遍历 public void midOrder() { if(this.root != null) { this.root.midOrder(); }else { System.out.println("当前二叉树为空,请先创建二叉树"); } } //右中左遍历 public void newMidOrder(T data) { if(this.root != null) { this.root.newMidOrder(data); }else { System.out.println("当前二叉树为空,请先创建二叉树"); } } } //树节点 class TreeNode<T extends Comparable<T>>{ private T data; private TreeNode<T> left; private TreeNode<T> right; public TreeNode(){ this.left = null; this.right = null; } public TreeNode(T data) { this.data = data; } public void setData(T data) { this.data = data; } public T getData() { return this.data; } public void setLeft(TreeNode<T> left) { this.left = left; } public TreeNode<T> getLeft() { return this.left; } public void setRight(TreeNode<T> right) { this.right = right; } public TreeNode<T> getRight() { return this.right; } //递归添加节点 public void add(TreeNode<T> node) { if(node==null){ return; } if(node.data == this.data) { return; } if(this.data.compareTo(node.data) > 0) { if(this.left == null) { this.left = node; }else { this.left.add(node); } }else { if(this.right == null) { this.right = node; }else { this.right.add(node); } } } //前序遍历二叉树 public void preOrder() { System.out.print(this.data+" "); if(this.left != null) { this.left.preOrder(); } if(this.right != null) { this.right.preOrder(); } } //中序遍历 public void midOrder(){ if(this.left != null) { this.left.midOrder(); } System.out.print(this.data+" "); if(this.right != null) { this.right.midOrder(); } } //右中左的中序遍历 public void newMidOrder(T data) { if(this.right != null) { this.right.newMidOrder(data); } if(this.data.compareTo(data) > 0) { System.out.print(this.data + " "); }else if(this.data.compareTo(data) == 0){ System.out.print(this.data); return; } if(this.left != null) { this.left.newMidOrder(data); } } //查找目标节点 public TreeNode<T> nodeSearch(T data) { if(this.data == data) { return this; }else if(this.data.compareTo(data) > 0) { if(this.left != null) { return this.left.nodeSearch(data); } return null; }else { if(this.right != null) { return this.right.nodeSearch(data); } return null; } } }
输入格式:
第一行数据个数
第二行输入数据
第三行输入目标节点的值
输出:逆序打印树中不小于目标节点值的所有值
这篇关于java实现逆序打印二叉排序树中比某个节点大的值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南