1. 程式人生 > >【TOJ 5438】數據結構實驗:生成BST

【TOJ 5438】數據結構實驗:生成BST

代碼 二叉 return tree time 函數 結點 man 完成

描述

給定一個從小到大排序的序列,將其轉換成一棵二叉搜索樹。

BST定義:

二叉搜索樹,又稱為二叉排序樹,它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。

二叉樹節點定義如下:

struct TreeNode {

int val;

struct TreeNode *left;

struct TreeNode *right;

};

題目部分代碼已經完成,您只需要補充並提交以下函數:

struct TreeNode* sortedArrayToBST(int* nums, int numsSize);

輸入

輸入數據第一行為整數n(n<=100),表示節點數目。

第二行有n個整數,表示節點元素值。

輸出

將有序序列轉換成一棵二叉搜索樹。

並對其進行中序遍歷輸出。

樣例輸入

5
1 2 3 4 5

樣例輸出

1 2 3 4 5

#include<bits/stdc++.h>
using namespace std; 
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};
struct TreeNode*createBST(struct TreeNode*root,int
x) { if(!root) { root=(struct TreeNode*)malloc(sizeof(struct TreeNode)); root->val=x; root->left=NULL; root->right=NULL; return root; } else if(x > root->val) { root->right=createBST(root->right,x); return
root; } else { root->left=createBST(root->left,x); return root; } } struct TreeNode* sortedArrayToBST(int* nums, int numsSize) { int i; struct TreeNode*root=NULL; for(i=0;i<numsSize;i++) root=createBST(root,nums[i]); return root; } void in(TreeNode*root) { if(root) { in(root->left); printf("%d ",root->val); in(root->right); } } int main() { int n,i,num[105]; cin>>n; for(i=0;i<n;i++) scanf("%d",&num[i]); in(sortedArrayToBST(num,n)); cout<<endl; return 0; }

【TOJ 5438】數據結構實驗:生成BST