挑战程序设计竞赛(算法和数据结构)——9.3二叉搜索树搜索的JAVA实现
Posted 小乖乖的臭坏坏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——9.3二叉搜索树搜索的JAVA实现相关的知识,希望对你有一定的参考价值。
题目与思路:
代码如下:
import java.util.LinkedList;
import java.util.Scanner;
public class BinaryTreeToInsert
//定义树的节点型类
public static class Node
int key;
Node parent, left, right;
Node(Node parent, Node left, Node right, int key)
this.parent = parent;
this.left = left;
this.right = right;
this.key = key;
public static void main(String[] args)
//建树
LinkedList<Node> tree = new LinkedList<Node>();
//数据输入及树的初始化与建立
Scanner cin = new Scanner(System.in);
System.out.println("请输入命令数:");
int n = cin.nextInt();
for (int i = 0; i < n; i++)
Scanner cin_string = new Scanner(System.in);
String s = cin_string.nextLine();
String[] string_arr = s.split(" ");//如果不是print那很显然是另有操作,需要分割
// String s = cin.nextLine();//nextLine()函数获取的是一整行的内容其中也包括了(\\n)也就是换行符,如果循环执行会出现nextLine()方法没有执行直接跳过的情况
if (string_arr[0].equals("print"))
printTreeWithInOrder(tree, tree.element());//用中序遍历树
System.out.println();
printTreeWithPreOrder(tree, tree.element());//用前序遍历树
else if(string_arr[0].equals("insert"))
int num = Integer.valueOf(string_arr[1]);
Node new_node = new Node(null, null, null, num);
insert(tree, new_node);//插入新的节点
else if(string_arr[0].equals("find"))
int num = Integer.valueOf(string_arr[1]);
Node new_node = findElement(tree.element(), num);
if(new_node==null)
System.out.println("no");
else
System.out.println("yes");
public static void insert(LinkedList<Node> T, Node z)
Node y = new Node(null, null, null, -1);//x的父节点
Node x;//获取T的根节点
if(T.isEmpty())x = new Node(null, null, null, -1);
elsex = T.element();
while(x!=null)//只要x不是根节点的父节点
y = x;//设置父节点
if(z.key<x.key)
x = x.left;//移动到左子节点
else
x = x.right;//移动到右子节点
z.parent = y;
if(y==null)
T.add(z);
else if(z.key<y.key)
T.add(z);
y.left = z;
else
T.add(z);
y.right = z;
public static void printTreeWithInOrder(LinkedList<Node> T, Node N/*具体的某一个节点*/)
if (N==null)//判决为空的条件
return;
printTreeWithInOrder(T, N.left);
System.out.print(N.key + " ");
printTreeWithInOrder(T, N.right);
public static void printTreeWithPreOrder(LinkedList<Node> T, Node N/*具体的某一个节点*/)
if (N==null)//判决为空的条件
return;
System.out.print(N.key + " ");
printTreeWithPreOrder(T, N.left);
printTreeWithPreOrder(T, N.right);
public static Node findElement(Node x, int k)
while(x!=null && k!= x.key)
if(k<x.key)x = x.left;
elsex = x.right;
return x;
以上是关于挑战程序设计竞赛(算法和数据结构)——9.3二叉搜索树搜索的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章
挑战程序设计竞赛(算法和数据结构)——9.2二叉搜索树插入的JAVA实现
挑战程序设计竞赛(算法和数据结构)——8.3二叉树的表达的JAVA实现
挑战程序设计竞赛(算法和数据结构)——9.4二叉搜索树删除的JAVA实现
挑战程序设计竞赛(算法和数据结构)——8.4二叉树的遍历的JAVA实现