本文最后更新于:2022年9月6日 晚上
                
              
            
            
              给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
提示:
- 树中节点数目在范围 
[0, 100] 内 
-100 <= Node.val <= 100 
进阶:递归算法很简单,你可以通过迭代算法完成吗?
Solution 
参考 @z1m 、[94 二叉树的中序遍历] 、[145 二叉树的后序遍历]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   | 
 
 
 
 
 
 
 
 
 
 
  class Solution { public:     vector<int> preorderTraversal(TreeNode* root) {         vector<int> res;         preorder(root, res);         return res;     } private:     void preorder(TreeNode* root, vector<int>& res){         if(root){             res.push_back(root->val);             preorder(root->left, res);             preorder(root->right, res);         }     } };
 
 
  | 
 
- 迭代法
 
- 它先将根节点 node 和所有的左孩子入栈并加入结果中,直至 node 为空
 
- 然后,每弹出一个栈顶元素 
tmp,就到达它的右孩子,再将这个节点当作 node 重新按上面的步骤来一遍,直至栈为空。 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | class Solution { public:     vector<int> preorderTraversal(TreeNode* root) {         stack<TreeNode*> stack;         vector<int> res;         TreeNode* node = root;         while(node!=nullptr || !stack.empty()){             while(node != nullptr){                 res.push_back(node->val);                 stack.push(node);                 node = node->left;             }             node = stack.top();             stack.pop();             node = node->right;         }         return res;     } };
 
  | 
 
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | 
 
 
 
 
 
 
 
 
 
 
 
 
 
  class Solution {     public List<Integer> preorderTraversal(TreeNode root) {         List<Integer> result = new ArrayList<>();         preorder(root, result);         return result;     }
      private void preorder(TreeNode root, List<Integer> rec) {         if (root == null) {             return;         }         rec.add(root.val);         preorder(root.left, rec);         preorder(root.right, rec);     } }
 
  | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   | class Solution {     public List<Integer> preorderTraversal(TreeNode root) {         List<Integer> result = new ArrayList<>();         Deque<TreeNode> stack = new LinkedList<>();         TreeNode node = root;         while (node != null || !stack.isEmpty()) {             while (node != null) {                 result.add(node.val);                 stack.push(node);                 node = node.left;             }             node = stack.pop();             node = node.right;         }         return result;     } }
 
  |