leetcode 144. Binary Tree Preorder Traversal 二叉树前序遍历 + 深度优先遍历DFS

谁借莪1个温暖的怀抱¢ 2022-06-08 04:58 284阅读 0赞

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].

Note: Recursive solution is trivial, could you do it iteratively?

本题考察的是二叉树的前序遍历的非递归实现。

嗯嗯,直接看代码吧!

代码如下:

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Stack;
  4. /*class TreeNode
  5. {
  6. int val;
  7. TreeNode left;
  8. TreeNode right;
  9. TreeNode(int x) { val = x; }
  10. }*/
  11. public class Solution
  12. {
  13. List<Integer> res=new ArrayList<>();
  14. public List<Integer> preorderTraversal(TreeNode root)
  15. {
  16. if(root==null)
  17. return res;
  18. else
  19. {
  20. //preOrder(root);
  21. byIteratorPreOrder(root);
  22. return res;
  23. }
  24. }
  25. //前序遍历非递归
  26. void byIteratorPreOrder(TreeNode root)
  27. {
  28. Stack<TreeNode> myStack=new Stack<>();
  29. myStack.push(root);
  30. //就是栈顶元素top出栈,然后访问top,然后添加top的子节点
  31. while(myStack.isEmpty()==false)
  32. {
  33. TreeNode top=myStack.peek();
  34. myStack.pop();
  35. res.add(top.val);
  36. //要先添加右结点,然后是左结点
  37. if(top.right!=null)
  38. myStack.push(top.right);
  39. if(top.left!=null)
  40. myStack.push(top.left);
  41. }
  42. }
  43. //递归前序遍历
  44. void preOrder(TreeNode root)
  45. {
  46. if(root==null)
  47. return;
  48. else
  49. {
  50. res.add(root.val);
  51. preOrder(root.left);
  52. preOrder(root.right);
  53. }
  54. }
  55. }

下面是C++的做法,就是使用DFS递归遍历来做

代码如下:

  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <unordered_map>
  5. #include <set>
  6. #include <unordered_set>
  7. #include <queue>
  8. #include <stack>
  9. #include <string>
  10. #include <climits>
  11. #include <algorithm>
  12. #include <sstream>
  13. #include <functional>
  14. #include <bitset>
  15. #include <numeric>
  16. #include <cmath>
  17. #include <regex>
  18. #include <iomanip>
  19. #include <cstdlib>
  20. #include <ctime>
  21. using namespace std;
  22. /*
  23. struct TreeNode {
  24. int val;
  25. TreeNode *left;
  26. TreeNode *right;
  27. TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  28. };
  29. */
  30. class Solution
  31. {
  32. public:
  33. vector<int> preorderTraversal(TreeNode* root)
  34. {
  35. vector<int> res;
  36. stack<TreeNode*> skt;
  37. while (true)
  38. {
  39. while (root != NULL)
  40. {
  41. res.push_back(root->val);
  42. skt.push(root);
  43. root = root->left;
  44. }
  45. if (skt.empty())
  46. break;
  47. else
  48. {
  49. root = skt.top()->right;
  50. skt.pop();
  51. }
  52. }
  53. return res;
  54. }
  55. };

发表评论

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

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

相关阅读