您的位置:首页 > 编程语言 > C语言/C++

#LeetCode# #C++# Binary Tree Preorder Traversal

2015-10-01 21:57 369 查看
给一个二叉树,返回前驱遍历的节点值

Note:递归容易,迭代呢?

方法一:递归

1.存root->val

2.递归存root->left

3.递归存root->right

Status: Accepted


Runtime: 0 ms

class Solution {
public:
void fillresult(TreeNode* root, vector<int> &result){
if(root == NULL) return;
result.push_back(root->val);
fillresult(root->left, result);
fillresult(root->right, result);
}

vector<int> preorderTraversal(TreeNode* root) {
if(root == NULL) return vector<int>();
vector<int> result;
fillresult(root, result);
return result;
}
};


方法二:迭代

1.stack存入root,作为开头

2.stack不为空,循环3、4

3.top取一个点ptop,存入vector

4.pop掉ptop,stack存入非空的ptop->right,stack存入非空的ptop->left

5.return vector

Status: Accepted


Runtime: 0 ms

class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
if(root == NULL) return result;

stack<TreeNode*> stk;
TreeNode* pNode = NULL;
stk.push(root);
while(!stk.empty()){
pNode = stk.top();
result.push_back(pNode->val);
stk.pop();
if(pNode->right){
stk.push(pNode->right);
}
if(pNode->left)
stk.push(pNode->left);
}
return result;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息