力扣经典二叉树题目

简介: 力扣经典二叉树题目

144. 二叉树的前序遍历


144. 二叉树的前序遍历


描述:给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

8738ed2dab1dd3fba1d8df231bcfc765_c998ea9aedbb46e998dfa13457394346.png


656a5573b1945ec079efa0dfd53a0b27_01ffa854e14e4e5b8a1caf214c6d1cab.png


解题思路:


1)若树为空,直接返回 NULL。

2)访问根结点,存下结点的值。

3)递归左子树。

4)递归右子树。


参考代码:


/**
 * 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> &ans) { //前序遍历
        if (root == nullptr) return;      //判断是否为空
        ans.push_back(root -> val); 
        preorder(root -> left, ans);      //递归左子树
        preorder(root -> right, ans);     //递归右子树
        return;
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ans;        //结果数组
        preorder(root, ans);    //前序遍历
        return ans;             //返回
    }
};


94. 二叉树的中序遍历


94. 二叉树的中序遍历


描述:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。


c4852c72fa6e7d0b9f7bf1ca64b79340_5c4c77a86fea41bdac64e6bb30f22d8c.png


解题思路:


1)若树为空,直接返回 NULL。

2)递归左子树。

3)访问根结点,存下结点的值。

4)递归右子树。


参考代码:


/**
 * 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 inorder(TreeNode* root, vector<int>& ans) {//中序遍历
        if (!root) return;            //判断是否为空
        inorder(root->left, ans);     //递归左子树
        ans.push_back(root->val);
        inorder(root->right, ans);    //递归右子树
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> ans;               //结果数组
        inorder(root, ans);            //中序遍历
        return ans;                    //返回
    }
};


145. 二叉树的后序遍历


145. 二叉树的后序遍历


描述:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。


c26c708c367974423731eb1b5a3e19aa_66b7fcdf15d8444f87a0be45a5d204fe.png


解题思路:


1)若树为空,直接返回 NULL。

2)递归左子树。

3)递归右子树。

4)访问根结点,存下结点的值。


参考代码:


/**
 * 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 postorder(TreeNode *root, vector<int> &ans) {//后序遍历
        if (root == nullptr) return;        //判断是否为空
        postorder(root->left, ans);         //遍历左子树
        postorder(root->right, ans);        //遍历右子树
        ans.push_back(root->val);
    }
    vector<int> postorderTraversal(TreeNode *root) {
        vector<int> ans;                    //答案数组
        postorder(root, ans);               //后序遍历
        return ans;                         //返回
    }
};


102. 二叉树的层序遍历


102. 二叉树的层序遍历


描述:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

d36aec600bed7b56f084930a1d43045b_4a25a13532694ccba6c6b143a1544013.png


解题思路:  


1)若树非空,创建辅助队列,头结点入队。

2)将队头结点储存下来记作结点 node,记录结点数据,然后进行出队操作。

3)将结点 node 的左右孩子进行入队操作。

4)重复操作至队列为空。


参考代码:


/**
 * 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:
    vector<vector<int>> levelOrder(TreeNode* root) {
        queue<TreeNode*> que;
        if (root != NULL) que.push(root);
        vector<vector<int>> ans;
        while (!que.empty()) {
            int size = que.size();
            vector<int> vec;
            for (int i = 0; i < size; i++) {
                TreeNode* node = que.front();
                que.pop();
                vec.push_back(node->val);
                if (node->left) que.push(node->left);
                if (node->right) que.push(node->right);
            }
            ans.push_back(vec);
        }
        return ans;
    }
};


104. 二叉树的最大深度


104. 二叉树的最大深度


描述:


给定一个二叉树,找出其最大深度。


二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。


说明: 叶子节点是指没有子节点的节点。


adbd4285209f6cfa438346ed2d6a2645_9fe753f339444037b95eef9ba2e57761.png


解题思路:


1)当遇到空结点时,返回 0。

2)递归计算出其左子树和右子树的最大深度。


参考代码:


/**
 * 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:
    int maxDepth(TreeNode* root) {
        if (root == nullptr) return 0;
        return max(maxDepth(root->left), maxDepth(root->right)) + 1;
    }
};

相关文章
|
5天前
二叉树oj题集(LeetCode)
二叉树oj题集(LeetCode)
|
5天前
|
算法
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
17 1
|
5天前
力扣面试经典题之二叉树
力扣面试经典题之二叉树
19 0
|
5天前
leetcode代码记录(二叉树的所有路径
leetcode代码记录(二叉树的所有路径
12 0
|
5天前
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
8 0
|
5天前
leetcode代码记录(二叉树的最小深度
leetcode代码记录(二叉树的最小深度
9 0
|
5天前
leetcode代码记录(二叉树的最大深度
leetcode代码记录(二叉树的最大深度
9 0
|
5天前
leetcode代码记录(翻转二叉树
leetcode代码记录(翻转二叉树
7 0
|
5天前
leetcode代码记录(二叉树的层序遍历
leetcode代码记录(二叉树的层序遍历
12 0
|
5天前
|
算法
leetcode代码记录(二叉树递归遍历
leetcode代码记录(二叉树递归遍历
8 0