【1099】Build A Binary Search Tree (30 分)

简介: 【1099】Build A Binary Search Tree (30 分)【1099】Build A Binary Search Tree (30 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
const int maxn=110;
由于题目直接给出的是结点编号的关系,因此使用二叉树的静态写法会更方便
key:把给定序列排序后按照中序遍历放入树中
struct node{  //二叉树的静态写法
  int data;
  int lchild,rchild;
}Node[maxn];
//n为结点个数,in为中序序列,num为已经填入/输出的结点个数
int n,in[maxn],num=0;
//中序遍历,将排序好的序列依次填入二叉树结点
void inOrder(int root){
  if(root == -1){ 
    return;
  }
  inOrder(Node[root].lchild);
  Node[root].data=in[num++]; //填入sort后排序好的序列中的整数
  inOrder(Node[root].rchild);  
}
//层次遍历
void BFS(int root){
  queue<int> q;//注意队列里是存地址
  q.push(root); //将根结点地址入队
  num=0;
  while(!q.empty()){
    int now=q.front();  //取出队首元素
    q.pop();
    printf("%d",Node[now].data); //访问队首元素
    num++;
    if(num < n) printf(" ");
    if(Node[now].lchild != -1) q.push(Node[now].lchild);  //左子树非空
    if(Node[now].rchild != -1) q.push(Node[now].rchild); //右子树非空
  }
}
int main(){   
  int lchild,rchild;
  scanf("%d",&n);  //结点个数
  for(int i=0;i<n;i++){  
    scanf("%d%d",&lchild,&rchild);  //左右孩子结点的编号
    Node[i].lchild=lchild;
    Node[i].rchild=rchild;
  }
  for(int i=0;i<n;i++){ 
    scanf("%d",&in[i]); //输入排序前的序列
  }
  sort(in,in+n); //从小到大排序,作为中序序列
  inOrder(0); //以0号结点为根结点进行中序遍历,填入整数
  BFS(0); //输出层序遍历序列
  system("pause");
    return 0;   
}
相关文章
|
2月前
|
算法 索引
Binary Search
Binary Search “【5月更文挑战第21天】”
30 5
|
2月前
C. Binary Search
C. Binary Search
|
机器学习/深度学习 C++
【PAT甲级 - C++题解】1099 Build A Binary Search Tree
【PAT甲级 - C++题解】1099 Build A Binary Search Tree
68 0
|
机器学习/深度学习 存储 C++
【PAT甲级 - C++题解】1064 Complete Binary Search Tree
【PAT甲级 - C++题解】1064 Complete Binary Search Tree
70 0
PAT (Advanced Level) Practice - 1043 Is It a Binary Search Tree(25 分)
PAT (Advanced Level) Practice - 1043 Is It a Binary Search Tree(25 分)
112 0
|
存储 算法
PAT (Advanced Level) Practice - 1151 LCA in a Binary Tree(30 分)
PAT (Advanced Level) Practice - 1151 LCA in a Binary Tree(30 分)
114 0
|
算法 Python
Leetcode-Medium 98. Validate Binary Search Tree
Leetcode-Medium 98. Validate Binary Search Tree
114 0
【1043】Is It a Binary Search Tree (25 分)
【1043】Is It a Binary Search Tree (25 分) 【1043】Is It a Binary Search Tree (25 分)
109 0
【1064】Complete Binary Search Tree (30 分)
【1064】Complete Binary Search Tree (30 分) 【1064】Complete Binary Search Tree (30 分)
87 0
|
机器学习/深度学习
1064. Complete Binary Search Tree (30)
#include #include #include using namespace std; const int maxn = 1001; vector num(maxn), cbt(maxn); int n, c...
831 0

热门文章

最新文章