题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列。
用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子。中序遍历的顺序正好是序列从小到大的顺序,因此中序遍历的时候顺便赋值就可以了,最后层次遍历输出。
思路一:中序遍历的时候赋值
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <queue> #define LEFT 0 #define RIGHT 1 using namespace std; const int maxn=105; int cnt=0; /* 中序遍历的顺序即为序列从小到大的顺序,因此中序遍历的时候顺便赋值, 最后层次遍历输出即可。 */ struct Node{ int val; int left; int right; }node[maxn]; void dfs(int i,int*a){ if(i==-1) return; dfs(node[i].left,a); node[i].val=a[cnt]; cnt++; dfs(node[i].right,a); } int main() { int n,l,r; int a[maxn]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d %d",&l,&r); node[i].left=l; node[i].right=r; } for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); dfs(0,a); queue<Node>q; q.push(node[0]); bool first=true; while(!q.empty()){ Node tmp=q.front(); q.pop(); if(first){ printf("%d",tmp.val); first=false; } else{ printf(" %d",tmp.val); } if(tmp.left!=-1) q.push(node[tmp.left]); if(tmp.right!=-1) q.push(node[tmp.right]); } return 0; }