c++实现二叉树前序、中序、后序的递归和非递归算法:
void PreOrder(TreeNode *root) {
if(!root) {
cout<<root->val;
PreOrder(root->left);
PreOrder(root->right);
}
}
void PreOrder2(TreeNode *root) {
stack<TreeNode *> st;
st.push(root);
while(!st.empty()) {
TreeNode *temp = st.top();
st.pop();
cout<<temp->val;
if(temp->right) st.push(temp->right);
if(temp->left) st.push(temp->left);
}
}
void InOrder(TreeNode *root) {
Inorder(root->left);
cout<<root->val;
InOrder(root->right);
}
void InOrder2(TreeNode *root) {
TreeNode *cur = root;
stack<TreeNode *> st;
while(!st.empty() || cur) {
if(cur) {
st.push(cur);
cur = cur->left;
} else {
cur = st.top();
st.pop();
cout<<cur->val;
cur = cur->left;
}
}
}
void PostOrder(TreeNode *root) {
PostOrder(root->left);
PostOrder(root->right);
cout<<root->val;
}
根左右
左右跟
void PostOrder2(TreeNode *root) {
vector<int> result;
stack<TreeNode *> st;
st.push(root);
while(!st.empty()) {
TreeNode *temp = st.top();
result.push_back(temp->val);
if(temp->left) st.push(temp->left);
if(temp->right) st.push(temp->right)
}
reverse(result.begin(), result.end());d
}