1.前序遍历:
/*
根节点先入栈。
for(栈非空)
do
{
栈顶元素出栈。依次压入右节点,左节点。
}
end for
*/
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if(root==NULL) return res;
stack<TreeNode*> st;
st.push(root);
while(!st.empty())
{
TreeNode* temp = st.top();
st.pop();
res.push_back(temp->val);
if(temp->right) st.push(temp->right);
if(temp->left) st.push(temp->left);
}
return res;
2.中序遍历
从根节点开始,不断访问左节点。沿路径入栈。出栈后访问右节点执行相同的操作。
vector<int> inorderTraversal(TreeNode* root) {
/*
用栈。对于每个节点,走到最左端,沿着路径压栈。
然后逐个弹出节点,对每个节点的右节点循环此操作。
*/
vector<int> res;
TreeNode* temp = root;
stack<