二叉查找树(华中科技大学计算机考研复试上机题)

时间:2022-02-04 18:56:12
题目描述
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。 
输入描述:
输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。

输出描述:
可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

二叉查找树

二叉查找树,也叫二叉排序树是满足以下条件的二叉树:
1.左子树上的所有节点值均小于根节点值
2.右子树上的所有节点值均不小于根节点值
3.左右子树也满足上述两个条件

节点类:

class Node {
public int iData; //数据域,可以存放对象
public Node left; //指向左孩子
public Node right;//指向右孩子
public void displsyndoe(){
System.out.print(iData +" ");
}

public Node(int iData) {//构造函数
this.iData = iData;
}
}

二叉查找树类

二叉查找树的插入过程如下:

1.若当前的二叉查找树为空,则插入的元素为根节点

2.若插入的元素值小于根节点值,则将元素插入到左子树中

3.若插入的元素值不小于根节点值,则将元素插入到右子树中

public void insert(int iData ){//插入新的节点
Node newNode = new Node(iData);
if(root == null){//树为空,把第一个节点置为根节点
root = newNode;
}else{ //不为空
Node current = root;//声明啷个指向root的引用
Node parent = root;
while (true){
parent = current;
if(iData < current.iData){ //待插入的数值小于当前节点的值
current = current.left; //把current指向当前节点的左孩子
if (current == null){
parent.left = newNode;
return;
}
}else {
current = current.right; //待插入的数值大于当前节点的值
if (current == null){
parent.right = newNode;
return;
}
}
}
}
}
}

二叉查找树(华中科技大学计算机考研复试上机题)


遍历

遍历是一个简单的递归过程,记住先序、中序、后序遍历的口诀就可以了

 public void preOrder(Node node){
if(node!=null){
node.displsyndoe();
preOrder(node.left);
preOrder(node.right);
}
}

public void middleOrder(Node node){
if(node!=null){
middleOrder(node.left);
node.displsyndoe();
middleOrder(node.right);
}
}

public void postOrder(Node node){
if(node!=null){
postOrder(node.left);
postOrder(node.right);
node.displsyndoe();
}
}