1.leetcode-104.二叉树的最大深度

题目描述

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。
给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。

递归方法
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(!root) return 0;
        int left=maxDepth(root->left);
        int right=maxDepth(root->right);
        return max(left, right)+1;
    }
};
非递归方法
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(!root) return 0;
        int height=0;
        queue q;
        q.push(root);

        while(!q.empty()){
            int num_size = q.size();
            for(int i=0;ileft) q.push(p->left);
                if(p->right) q.push(p->right);
            }
            height++;
        }
        return height;
    }
};

2.leetcode-144.二叉树的前序遍历

题目描述

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

非递归方法
class Solution {
public:
    vector preorderTraversal(TreeNode* root) {
        vector ans;
        if(!root) return ans;
        stack s;
        s.push(root);
        while(!s.empty()){
            TreeNode *p=s.top();
            ans.push_back(p->val);
            s.pop();
            if(p->right) s.push(p->right);
            if(p->left) s.push(p->left);
        }
        return ans;
    }
};

3.leetcode-94.二叉树的中序遍历

题目描述

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

非递归方法
class Solution {
public:
    vector inorderTraversal(TreeNode* root) {
        vector ans;
        if(!root) return ans;
        stack s;
        TreeNode *cur=root;
        while(cur!=nullptr || !s.empty()){
            while(cur){
                s.push(cur);
                cur = cur->left;
            }
            cur = s.top();
            s.pop();
            ans.push_back(cur->val);
            cur=cur->right;
        }
        return ans;
    }
};

4.leetcode-145.二叉树的后序遍历

题目描述

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

非递归方法
class Solution {
public:
    vector postorderTraversal(TreeNode* root) {
        vector ans;
        if(!root) return ans;
        stack s;
        TreeNode* cur=root;
        TreeNode* last=nullptr;
        while(cur || !s.empty()){
            while(cur){
                s.push(cur);
                cur = cur->left;
            }
            cur = s.top();
            if(!cur->right || cur->right==last){
                ans.push_back(cur->val);
                s.pop();
                last=cur;
                cur=nullptr;
            }else cur=cur->right;
        }
        return ans;
    }
};

你可能感兴趣的:(树)