输入二叉树,输出该树的中序序列。
二叉树的输入使用二叉树的数组形式表示,在输入中如果节点为空,
则使用字符串“null”表示。如二叉树
aa
bb cc
dd ee ff
使用如下输入表示:
aa bb cc dd null ee ff
注意:输入在同一行,不会有第二行输入
例1:
输入:
1 2 3
输出:
2 1 3(没有换行符)
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
void fun(int bp, int max, vector<string>strs);
int main(){
string str;
getline(cin, str);
istringstream iss(str);
vector<string> strs{ istream_iterator<string>(iss), istream_iterator<string>() };//以空格分隔字符串
vector<string>::size_type strSize = strs.size();
int strMax = (int)strSize;
fun(0, strMax - 1, strs);
}
void fun(int bp, int max, vector<string>strs){
if ((2 * bp + 1) <= max && strs[2 * bp + 1] != "null"){//找左儿子 最左的那个
fun(2 * bp + 1, max, strs);
}
cout << strs[bp] << " ";//输出当前树下节点
if ((2 * bp + 1) <= max - 1 && strs[2 * bp + 2] != "null"){
fun(2 * bp + 2, max, strs);//遍历右子树
}
}