纯手写输入二叉树并建树输出前序
链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/submissions/
题目简单,但是如果输入的二叉树只是一个字符串,需要自己进行处理与建树,则难度增加很多。
#include<bits/stdc++.h>
using namespace std;
struct node{
node *left,*right;
int value;
};
queue<node*>q;
int n,now,num;
int a[110000];
void dfs(node *now){
cout<<now->value<<" ";
if(now->left!=NULL)dfs(now->left);
if(now->right!=NULL)dfs(now->right);
}
int main(){
string str;
getline(cin,str);
n=0;
for(int i=0;i<str.length();i++){
if(str[i]=='n')num=-1;
if(str[i]>='0'&&str[i]<='9')num=num*10+str[i]-'0';
if(str[i]==','){
n++;
a[n]=num;
num=0;
}
}
n++;
a[n]=num;
node *root=new node();
root->value=a[1];
q.push(root);
//plan A
// now=1;
// while(q.size()){
// if(now==n)break;
// node *po=q.front();
// q.pop();
// now++;
// if(a[now]==-1)po->left=NULL;
// else{
// node *child=new node();
// child->value=a[now];
// po->left=child;
// q.push(child);
// }
// now++;
// if(a[now]==-1)po->right=NULL;
// else{
// node *child=new node();
// child->value=a[now];
// po->right=child;
// q.push(child);
// }
// }
//plan B
for(int i=2;i<=n;i++){
node *now=q.front();
if(i%2==0){
if(a[i]==-1)now->left=NULL;
else {
node *child=new node();
child->value=a[i];
now->left=child;
q.push(child);
}
}else{
if(a[i]==-1)now->right=NULL;
else {
node *child=new node();
child->value=a[i];
now->right=child;
q.push(child);
}
q.pop();
}
}
dfs(root);
return 0;
}