zoukankan      html  css  js  c++  java
  • 九度 1467:二叉排序树

    题目描述:

            二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树:


            1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值;
            2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值;
            3. 左、右子树本身也是一颗二叉排序树。


      现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。

    思路

    1. 根据数组构建二叉搜索树

    代码

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    class Node {
    public:
        Node(int _value):value(_value) {
            left = right = NULL;
        }
    
        Node() {
            Node(0);
        }
    
        int value;
        Node *left, *right;
    };
    
    int arr[200];
    int n;
    
    Node* findTree(Node* root, int x) {
        if(root->value > x) {
            if(root->left)
                return findTree(root->left, x);
            else {
                Node *newNode = new Node(x);
                root->left = newNode;
                return root;
            }
        }
    
        if(root->value < x) {
            if(root->right)
                return findTree(root->right, x);
            else {
                Node *newNode = new Node(x);
                root->right = newNode;
                return root;
            }
        }
    }
    
    void buildTree() {
        Node *root = new Node(arr[0]);
        cout << -1 << endl;
        for(int i = 1; i < n; i ++) {
            Node *father = findTree(root, arr[i]);
            cout << father->value << endl;
        }
    }
    int main() {
        while(scanf("%d", &n) != EOF) {
            for(int i = 0; i < n; i ++)
                scanf("%d", arr+i);
    
            buildTree();
        }
        return 0;
    }
  • 相关阅读:
    dubbo学习小计
    学习java虚拟机
    学习java虚拟机
    学习java虚拟机
    学习java虚拟机
    学习设计模式
    学习设计模式
    学习设计模式
    mybatis从入门到精通(五) sqlSession API的使用
    mybatis从入门到精通(四) 动态SQL
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3587100.html
Copyright © 2011-2022 走看看