题目
题解
参考:
https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/tu-jie-er-cha-shu-de-si-chong-bian-li-by-z1m/
- 递归
- 迭代+栈
- 迭代模板
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
//递归
// class Solution {
// public:
// void preorder(TreeNode*root,vector<int> &res){
// if(root==nullptr)
// return ;
// res.push_back(root->val);
// preorder(root->left,res);
// preorder(root->right,res);
// }
// vector<int> preorderTraversal(TreeNode* root) {
// vector<int> res;
// preorder(root,res);
// return res;
// }
// };
//迭代:根->左->右
// class Solution {
// public:
// vector<int> preorderTraversal(TreeNode* root) {
// vector<int> res;
// if(root==nullptr)
// return res;
// stack<TreeNode*> stk;
// TreeNode *node=root;
// stk.emplace(node);
// while(!stk.empty()){
// node=stk.top();
// if(node!=nullptr){
// res.push_back(node->val);
// stk.pop();
// if(node->right!=nullptr)
// stk.emplace(node->right);
// if(node->left!=nullptr)
// stk.emplace(node->left);
// }
// }
// return res;
// }
// };
//迭代:根->左->左->左 “僵尸”模式,迭代模板
// class Solution {
// public:
// vector<int> preorderTraversal(TreeNode* root) {
// vector<int> res;
// if(root==nullptr)
// return res;
// stack<TreeNode*> stk;
// TreeNode *node=root;
// while(!stk.empty()||node!=nullptr){
// while(node!=nullptr){
// res.push_back(node->val);
// stk.emplace(node);
// node=node->left;
// }
// node=stk.top()->right;
// stk.pop();
// }
// return res;
// }
// };
//Morris 遍历