One Code 144. Preorder traversal of binary tree every day

insert image description here
Code idea
Recursive is still very simple.
The emphasis is on iteration.

code

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    void search(TreeNode* root,vector<int> &v){
    
    
        if(!root) return ;
        v.push_back(root->val);
        search(root->left,v);
        search(root->right,v);
    }
    vector<int> preorderTraversal(TreeNode* root) {
    
    
    //递归版本
        vector<int> v;
        search(root,v);
        return v;
    }
};
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<int> preorderTraversal(TreeNode* root) {
    
    
    //迭代版本
        vector<int> v;
        stack<TreeNode*> s;
        s.push(root);
        while(!s.empty()){
    
    
            TreeNode *node = s.top();
            s.pop();
            if(!node) continue;
            v.push_back(node->val);
            if(node->right) s.push(node->right);
            if(node->left) s.push(node->left);
        }
        return v;
    }
};
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<int> preorderTraversal(TreeNode* root) {
    
    
        //大佬提出的只压右节点,优化了迭代,大佬们牛批
        vector<int> v;
        TreeNode *node = root;
        stack<TreeNode*> s;
        while(node || !s.empty()){
    
    
            if(!node){
    
    
                node = s.top();
                s.pop();
            }
            if(node->right) s.push(node->right);
            v.push_back(node->val);
            node = node->left;
        }
        return v;
    }
};

Guess you like

Origin blog.csdn.net/qq_41746268/article/details/108325168