给一个二叉树,返回前驱遍历的节点值
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;
}
};
二叉树前驱遍历
本文介绍了一种实现二叉树前驱遍历的方法,包括递归和迭代两种方式。递归方法直接且易于理解;迭代方法使用栈来保存节点,通过循环处理实现了与递归相同的功能。
1439

被折叠的 条评论
为什么被折叠?



