LeetCode练习题226、98

226. 翻转二叉树

翻转一棵二叉树。
示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

翻转二叉树

struct TreeNode* invertTree(struct TreeNode* root){
    if(root == NULL) {
        return NULL;
    }  //终止条件
    struct TreeNode *temp = root->left;
    root->left = root->right;
    root->right = temp;
    // 交换左右子树
    invertTree(root->left); //递归交换左子树
    invertTree(root->right); //递归交换右子树
    return root;
}

98. 验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

示例 1:
输入:

    2
   / \
  1   3

输出: true

示例 2:
输入:

    5
   / \
  1   4
     / \
    3   6

输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
验证二叉搜索树

递归

bool recursive(struct TreeNode *root, long low, long high) {
    if(root == NULL) return true;
    long val = root->val;
    if(val <= low || val >= high) {
        return false;
    }   //判断根结点
    return recursive(root->left, low, val) && recursive(root->right, val, high);   //递归左子树右子树,更新上下界值
}
bool isValidBST(struct TreeNode* root){
    return recursive(root, LONG_MIN, LONG_MAX);
}

INT_MAX:int类型的最大值 INT_MIN:int类型的最小值
long类型防止INT_MAX溢出

中序遍历
使二叉搜索树从小到大排列

bool inorder(struct TreeNode *root, struct TreeNode **pre) {
    if(root == NULL) {
        return true;
    }
    if(!inorder(root->left, pre)) {
        return false;
    }
    if(*pre != NULL && root->val <= (*pre)->val) {
        return false;
    }
    *pre = root;
    return inorder(root->right, pre);
}
bool isValidBST(struct TreeNode* root){
    struct TreeNode *pre = NULL;
    return inorder(root, &pre);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值