LeetCode 144. 二叉树的前序遍历

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

 示例:

输入: [1,null,2,3]
1
\
2
/
3

输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal

递归:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12    
13     void process(TreeNode* root,vector<int> &ans)
14     {
15         ans.push_back(root->val);
16         if(root->left) process(root->left,ans);
17         if(root->right) process(root->right,ans);
18     }
19 
20     vector<int> preorderTraversal(TreeNode* root) {
21         vector<int> ans;
22         if(root)
23             process(root,ans);
24         return ans;
25     }
26 
27 
28 };

迭代:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12    
13    
14     vector<int> preorderTraversal(TreeNode* root) {
15         vector<int> ans;
16         if(!root) return ans;
17         stack<TreeNode*> nodeStack;
18         nodeStack.push(root);
19         while(!nodeStack.empty()) {
20             TreeNode* node = nodeStack.top();
21             ans.push_back(node->val);
22             nodeStack.pop();
23             if(node->right) nodeStack.push(node->right);
24             if(node->left) nodeStack.push(node->left);
25         }
26         return ans;
27     }
28 
29 
30 };

 

posted @ 2019-09-08 15:42  听说这是最长的名字了  阅读(192)  评论(0编辑  收藏  举报