本文共 1732 字,大约阅读时间需要 5 分钟。
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};class TreeToSequence { vector preOrder(TreeNode * root){ vector ans; stacks; TreeNode * cur = root; if(cur) s.push(cur); while (!s.empty()) { cur = s.top(); s.pop(); ans.push_back(cur->val); if(cur->right) s.push(cur->right); if(cur->left) s.push(cur->left); } return ans; } vector Inorder(TreeNode * root){ TreeNode * cur = root; vector ans; stack s; if(cur){ s.push(cur); cur = cur->left; } while (!s.empty()||cur) { if(cur){ s.push(cur); cur = cur->left; } else { TreeNode * node = s.top(); s.pop(); ans.push_back(node->val); cur = node ->right; } } return ans; } vector postOrder(TreeNode *root){//可以用一个辅助栈实现,但是稍微复杂 这里未写出 stack inputStack,outputStack; vector ans; TreeNode * cur = root; if(cur) inputStack.push(cur); while (!inputStack.empty()) { cur = inputStack.top(); inputStack.pop(); outputStack.push(cur); if(cur->left) inputStack.push(cur->left); if(cur->right) inputStack.push(cur->right); } while (!outputStack.empty()) { cur = outputStack.top(); outputStack.pop(); ans.push_back(cur->val); } return ans; }public: vector > convert(TreeNode* root) { vector > ans; ans.push_back(preOrder(root)); ans.push_back(Inorder(root)); ans.push_back(postOrder(root)); return ans; }};
转载地址:http://wehji.baihongyu.com/