挑战程序设计竞赛(算法和数据结构)——9.2二叉搜索树插入的JAVA实现

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——9.2二叉搜索树插入的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 s = cin.nextLine();//nextLine()函数获取的是一整行的内容其中也包括了(\\n)也就是换行符,如果循环执行会出现nextLine()方法没有执行直接跳过的情况
            if (s.equals("print")) 
                printTreeWithInOrder(tree, tree.element());//用中序遍历树
                System.out.println();
                printTreeWithPreOrder(tree, tree.element());//用前序遍历树
            
            else 
                String[] string_arr = s.split(" ");
                int num = Integer.valueOf(string_arr[1]);
                Node new_node = new Node(null, null, null, num);
                insert(tree, new_node);//插入新的节点
            
        
    

    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);
    


输入;

请输入命令数:
8
insert 30
insert 88
insert 12
insert 1
insert 20
insert 17
insert 25
print
1 12 17 20 25 30 88 
30 12 1 20 17 25 88 
Process finished with exit code 0

输出:

1 12 17 20 25 30 88 
30 12 1 20 17 25 88

以上是关于挑战程序设计竞赛(算法和数据结构)——9.2二叉搜索树插入的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章

挑战程序设计竞赛(算法和数据结构)——9.3二叉搜索树搜索的JAVA实现

挑战程序设计竞赛(算法和数据结构)——8.3二叉树的表达的JAVA实现

挑战程序设计竞赛(算法和数据结构)——9.4二叉搜索树删除的JAVA实现

挑战程序设计竞赛(算法和数据结构)——8.4二叉树的遍历的JAVA实现

挑战程序设计竞赛(算法和数据结构)——8.5二叉树的重建的JAVA实现

挑战程序设计竞赛(算法和数据结构)——15.5最小生成树(Kruskal算法)的JAVA实现