思路
大家对于遍历二叉树应该很熟悉了,重点就是构建二叉树,构建二叉树和遍历二叉树是类似的,因为都是走的一个路径,所以我们就可以模拟先序遍历来进行构建。
#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; }