思路
大家对于遍历二叉树应该很熟悉了,重点就是构建二叉树,构建二叉树和遍历二叉树是类似的,因为都是走的一个路径,所以我们就可以模拟先序遍历来进行构建。
#include<iostream>
#include<stack>
using namespace std;
class TreeNode{
public:
char val;
TreeNode* left;
TreeNode* right;
public:
TreeNode(char val) : val(val), left(NULL), right(NULL) {}
};
// 递归构建二叉树
int pos = 0;
TreeNode* createTree(string s){
char c = s[pos ++];
if(c =='#')//若是‘#’,说明该节点为空返回上一级节点
return NULL;
TreeNode* root = new TreeNode(c);//若不为‘#’,则创建该节点,并为本节点赋值
root->left = createTree(s);//创建左子树
root->right = createTree(s);//创建右子树
return root;
}
void inOrder(TreeNode* root){
if(root == NULL) return;
inOrder(root->left);
cout << root->val << " ";
inOrder(root->right);
}
int main(){
string s;
while(cin >> s){
inOrder(createTree(s));
}
return 0;
} 
京公网安备 11010502036488号