Given a binary tree, return the preorder traversal of its nodes‘ values.
For example:
Given binary tree {1,#,2,3}
,
1 2 / 3
return [1,2,3]
.
解法一:
递归方法:
如果root不为空,
先访问根,递归左子树,递归右子树。
void preorderCore(TreeNode *root,vector<int> &res){ if(root){ res.push_back(root->val); preorderCore(root->left,res); preorderCore(root->right,res); } } vector<int> preorderTraversal(TreeNode* root) { vector<int> res; preorderCore(root,res); return res; }
解法二:
使用栈,迭代方法。
void preorderCore(TreeNode *root,vector<int> &res){
if(!root)
return;
stack<TreeNode*> st;
while(!st.empty()||root){
while(root){
st.push(root);
res.push_back(root->val);
root=root->left;
}
root=st.top();
st.pop();
root=root->right;
}
}
另一种写法为:
void preorderCore(TreeNode *root,vector<int> &res){ if(!root) return; stack<TreeNode*> st; st.push(root); while(!st.empty()){ root=st.top(); st.pop(); res.push_back(root->val); if(root->right) st.push(root->right); if(root->left) st.push(root->left); } }
144. Binary Tree Preorder Traversal——递归,非递归
原文:http://searchcoding.blog.51cto.com/1335412/1752603