二叉树创建并查询

学习作业记录

创建一个二叉树,结点存放的是整型数据,遵循的规则是:第一个数值作为二叉树的树根,小于父节点的值放在左子节点,大于父节点的值放在右子节点。 在创建好二叉树的基础之上,进行查询,通过输入的要查询的值,找出它双亲结点、孩子结点、兄弟结点。 输出二叉树的前序、中序、后序遍历结果。

输入格式:

输入数值为整型,多行输入。 第一行:二叉树的结点个数。 第二行:结点的值,以逗号间隔。 第三行:要查询的结点值。

输出格式:

第一行输出要查询的结点的双亲结点。 第二行输出要查询的结点的孩子结点。 第三行输出兄弟结点。 第四行为二叉树前序遍历结果。 第五行为二叉树中序遍历结果。 第六行为二叉树后序遍历结果。

输入样例:

在这里给出一组输入。例如:
8
5,2,9,11,4,23,10,16
23

输出样例:

在这里给出相应的输出。例如:

23的双亲是11
23的左孩子是16无右孩子
23的兄弟是10
前序结果5,2,4,9,11,10,23,16
中序结果2,4,5,9,10,11,16,23
后序结果4,2,10,16,23,11,9,5

输入样例2:

在这里给出一组输入。例如:

1
7
7

输出样例2:

在这里给出相应的输出。例如:

7无双亲
7无孩子
7无兄弟
前序结果7
中序结果7
后序结果7

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        String str = sc.next();
        String[] s = str.split(",");
        int[] a = new int[num];
        for (int i = 0; i < num; i++) {
            a[i]=Integer.parseInt(s[i]);
        }
        int x=sc.nextInt();
        BinaryTree b=new BinaryTree(a,num,x);
    }
}
class TreeNode{
    int value;
    TreeNode parent;
    TreeNode left;
    TreeNode right;
    TreeNode bro;
    public TreeNode(int value){
        this.value=value;
        this.parent=null;
        this.left=null;
        this.right=null;
    }
}
class BinaryTree{
    public TreeNode rootNode;
    public BinaryTree(int[]data,int num,int x){
        for (int i=0;i<num;i++){
            addNode(data[i]);
        }
        searchNode(rootNode,x);
        int count =0;
        System.out.print("前序结果");
        PreOrder(rootNode);
        System.out.println();
        System.out.print("中序结果");
        InOrder(rootNode,count);
        System.out.println();
        System.out.print("后序结果");
        PostOrder(rootNode);

    }
    void addNode(int value){
        TreeNode currentNode=rootNode;
        if(rootNode==null){
            rootNode=new TreeNode(value);
            return;
        }
        while(true){
            if(value<currentNode.value){
                if(currentNode.left==null){
                    currentNode .left=new TreeNode(value);
                    currentNode.left.parent=currentNode;
                    return;
                }else
                    currentNode =currentNode.left;
            }else{
                if(currentNode.right==null){
                    currentNode.right=new TreeNode(value);
                    currentNode.right.parent=currentNode;
                    return;
                }else
                    currentNode =currentNode.right ;
            }
        }

    }
    public void searchNode(TreeNode node,int x) {
        while (true) {
            if (x < node.value) {
                node = node.left;
            } else if (x > node.value) {
                node = node.right;
            } else if (x == node.value) {
                if (node.parent == null)
                    System.out.println(x + "无双亲");
                else
                    System.out.println(x + "的双亲是" + node.parent.value);
                if (node.left == null && node.right == null) {
                    System.out.println(x + "无孩子");
                } else {
                    if (node.left == null)
                        System.out.println(x + "无左孩子右孩子是" + node.right.value);
                    else if (node.right == null) {
                        System.out.println(x + "的左孩子是" + node.left.value + "无右孩子");
                    } else
                        System.out.println(x + "的左孩子是" + node.left.value + "右孩子是" + node.right.value);

                }
                if(node.parent==null||node.parent.left==null||node.parent.right==null){
                    System.out.println(x+"无兄弟");
                }else{
                    if(node.parent.right==node){
                        System.out.println(x+"的兄弟是"+node.parent.left.value);
                    }else
                        System.out.println(x+"的兄弟是"+node.parent.right.value);
                }
                break;

            }

        }
    }
    public void PreOrder(TreeNode node){
        if(node!=null){
            if(node==rootNode){
                System.out.print(node.value);
            }else
                System.out.print(","+node.value);
            PreOrder(node.left);
            PreOrder(node.right);
        }

    }
    public void InOrder(TreeNode node,int count ){
        if(node!=null){
            InOrder(node.left,count);
            if(count==0&&node.left==null){

                System.out.print(node.value);
                count++;
            }else{
                System.out.print(","+node.value);
                count++;
            }
            InOrder(node.right,count);
        }

    }
    public void PostOrder(TreeNode node){
        if(node!=null){

            PostOrder(node.left);
            PostOrder(node.right);
            if(node==rootNode)
                System.out.print(node.value);
            else
                System.out.print(node.value+",");
        }
    }
}





J77
发布了7 篇原创文章 · 获赞 2 · 访问量 97

猜你喜欢

转载自blog.csdn.net/weixin_46053704/article/details/105393382