标签:arr 数据结构 temp 05 int BTNode que 二叉树 bTree
example
- https://pintia.cn/problem-sets/994805342720868352/problems/994805365537882112
#include <iostream>
#include <queue>
#define maxSize 10
using namespace std;
typedef struct BTNode {
int left = -1;
int right = -1;
}BTNode;
void arr2BTree(char arr[][2], int n, BTNode* bTree) {
for (int i = 0; i < n; ++i) {
if (arr[i][0] != '-') {
bTree[i].left = arr[i][0] - '0';
}
if (arr[i][1] != '-') {
bTree[i].right = arr[i][1] - '0';
}
}
}
int findRoot(BTNode* bTree, int n) {
//找到根节点的位置
int* hash = new int[n];
for (int i = 0; i < n; ++i) {
hash[i] = 0;
}
for (int i = 0; i < n; ++i) {
hash[bTree[i].left] = 1;//不是根节点
hash[bTree[i].right] = 1;//不是根节点
}
for (int i = 0; i < n; ++i) {
//找一下谁是根节点
if (hash[i] == 0) {
return i;//i是根节点
}
}
return 0;
}
void printInvertedLevelOrder(BTNode bTree[], int n, int root) {//打印层次遍历,但每层是从右往左
queue<int> que;
que.push(root);
int temp;
int count = 0;
while (que.size() != 0) {
temp = que.front();
que.pop();//出队
if (bTree[temp].right != -1) {
que.push(bTree[temp].right);
}
if (bTree[temp].left != -1) {
que.push(bTree[temp].left);
}
++count;
if (count != n) {
cout << temp << " ";
}
else {
cout << temp;
}
}
}
void printInvertedInOrder(BTNode bTree[], int &flag, int root) {//打印中序,但是是右-中-左
//调用时,flag为1,代表是根节点,以后每次递归时,都将flag设为0
if (bTree[root].right != -1) {
printInvertedInOrder(bTree, flag, bTree[root].right);
}
if (flag == 1) {
cout << root;
flag--;
}
else {
cout << " " << root;
}
if (bTree[root].left != -1) {
printInvertedInOrder(bTree, flag, bTree[root].left);
}
}
int main() {
int n;
cin >> n;
char arr[maxSize][2];
for (int i = 0; i < n; ++i) {
cin >> arr[i][0] >> arr[i][1];
}
BTNode* bTree = new BTNode[n];
arr2BTree(arr, n, bTree);
int root = findRoot(bTree, n);
printInvertedLevelOrder(bTree, n, root);
cout << endl;
int flag = 1;
printInvertedInOrder(bTree, flag, root);
return 0;
}
标签:arr,数据结构,temp,05,int,BTNode,que,二叉树,bTree 来源: https://blog.csdn.net/u014421914/article/details/114410920
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。