欢迎光临散文网 会员登陆 & 注册

二叉树的遍历(递归)

2023-07-18 08:39 作者:薄荷硬糖酱  | 我要投稿

144. 二叉树的前序遍历

难度简单

1087

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

 

示例 1:

输入:root = [1,null,2,3]输出:[1,2,3]

示例 2:

输入:root = []输出:[]

示例 3:

输入:root = [1]输出:[1]

示例 4:

输入:root = [1,2]输出:[1,2]

示例 5:

输入:root = [1,null,2]输出:[1,2]

 

提示:

  • 树中节点数目在范围 [0, 100] 内

  • -100 <= Node.val <= 100

正确做法:

/**

 * 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 traversaltree(TreeNode *cur, vector<int>& vec)

    {

        if(cur==nullptr)return;

        vec.push_back(cur->val);

        traversaltree(cur->left,vec);

        traversaltree(cur->right,vec);

    }


    vector<int> preorderTraversal(TreeNode* root) {

        vector<int> ans;

        traversaltree(root, ans);

        return ans;

    }

};

注意:递归算法中的形参vector要传引用,不然无法记录


94. 二叉树的中序遍历

难度简单

1862

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

 

示例 1:

输入:root = [1,null,2,3]输出:[1,3,2]

示例 2:

输入:root = []输出:[]

示例 3:

输入:root = [1]输出:[1]

 

提示:

  • 树中节点数目在范围 [0, 100] 内

  • -100 <= Node.val <= 100

 

/**

 * 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 traversaltree(TreeNode *cur, vector<int>& vec){

        if(cur==nullptr)return;

        traversaltree(cur->left, vec);

        vec.push_back(cur->val);

        traversaltree(cur->right, vec);

    }

    vector<int> inorderTraversal(TreeNode* root) {

        vector<int> ans;

        traversaltree(root, ans);

        return ans;

    }

};



145. 二叉树的后序遍历

难度简单

1057

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

 

示例 1:

输入:root = [1,null,2,3]输出:[3,2,1]

示例 2:

输入:root = []输出:[]

示例 3:

输入:root = [1]输出:[1]

 

提示:

  • 树中节点的数目在范围 [0, 100] 内

  • -100 <= Node.val <= 100

 

进阶:递归算法很简单,你可以通过迭代算法完成吗?

通过次数644,390提交次数844,674

/**

 * 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 traversaltree(TreeNode *cur, vector<int>& vec){

        if(cur==nullptr)return;

        traversaltree(cur->left, vec);

        traversaltree(cur->right, vec);

        vec.push_back(cur->val);

    }


    vector<int> postorderTraversal(TreeNode* root) {

        vector<int> ans;

        traversaltree(root, ans);

        return ans;

    }

};


二叉树的遍历(递归)的评论 (共 条)

分享到微博请遵守国家法律