您的位置:首页 > 其它

144. Binary Tree Preorder Traversal――递归,非递归

2016-03-18 15:39 225 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: