给一个二叉树,返回前驱遍历的节点值
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;
}
};