Skip to content
高琦程 Gao Qicheng
Go back

二叉树(1)

Edit page

二叉树的结构十分有利于递归和分治这个组合思想发挥作用。

比如,一道经典的题目是——


翻转二叉树

题目描述

后序遍历,分治+递归。


class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(!root){
            return nullptr;
        }

        TreeNode* left = invertTree(root->left);
        TreeNode* right = invertTree(root->right);

        root->left = right;
        root->right = left;

        return root;
    }
};

再补充两个概念,平衡二叉树和二叉搜索树。

以及非常经典的,有序数组转平衡二叉搜索树。


题目描述

为了尽可能“平衡”,我们每次总是选择数组中间的数字作为root,然后分而治之。


class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return buildTree(nums,0,nums.size()-1);
    }

    TreeNode* buildTree(vector<int> nums,int left,int right){
        if(left>right) return nullptr;
         int mid = left+(right-left)/2;
         TreeNode* root = new TreeNode(nums[mid]);

         root->left = buildTree(nums,left,mid-1);
         root->right = buildTree(nums,mid+1,right);

         return root;
    }
};


Edit page
Share this post:

Previous Post
二叉树(2)
Next Post
Codex 备忘