LeetCode[144] 二叉树的前序遍历(迭代)

淩亂°似流年 2022-11-20 08:19 265阅读 0赞

前言:今天的 LeetCode 上的每日一题,二叉树的前序遍历,用 C++ 实现

题目描述

给定一个二叉树,返回它的前序遍历。
示例

算法分析

  1. 二叉树的递归前序遍历,先访问根节点,再访问左子树,最后访问右子树
  2. 迭代算法,利用栈保存节点信息,完成遍历操作

代码实现

递归代码:

  1. class Solution {
  2. public:
  3. vector<int> preorderTraversal(TreeNode* root) {
  4. vector<int> result;
  5. preorder(root, result);
  6. return result;
  7. }
  8. void preorder(TreeNode* root, vector<int>& re) {
  9. if(root != NULL) {
  10. re.push_back(root -> val);
  11. preorder(root -> left, re);
  12. preorder(root -> right, re);
  13. }
  14. }
  15. };

2
迭代代码:注意入栈顺序,左子树先出栈,因此右子树先入栈

  1. class Solution {
  2. public:
  3. vector<int> preorderTraversal(TreeNode* root) {
  4. vector<int> result;
  5. if(root == NULL) {
  6. return result;
  7. }
  8. stack<TreeNode*> Nodes;
  9. Nodes.push(root);
  10. TreeNode* cur = NULL;
  11. while(!Nodes.empty()) {
  12. cur = Nodes.top();
  13. result.push_back(cur -> val);
  14. Nodes.pop();
  15. if(cur -> right) {
  16. Nodes.push(cur -> right);
  17. }
  18. if(cur -> left) {
  19. Nodes.push(cur -> left);
  20. }
  21. }
  22. return result;
  23. }
  24. };

1

发表评论

表情:
评论列表 (有 0 条评论,265人围观)

还没有评论,来说两句吧...

相关阅读