刷题笔记2022.3.6bst

刷题笔记2022.3.6

  1. 颠倒32位二进制。uint32_t :unsigned (无符号)int 32位。

(n & 1):取二进制的最末位。<<:左移。注意for循环的使用,。

  1. 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。标签是位运算,不会,只能想到哈希表。

数组中的全部元素的异或运算结果即为数组中只出现一次的数字。

规则:相同为0,相异为1,0∧0=0,0∧1=1,1∧0=1,1∧1=0   ^

  1. 验证是二叉搜索树。

递归比中序遍历简单我觉得。

但是递归真的不好卡,做起来反倒不如中序遍历简单。

递归:LONG_MIN, LONG_MAX实数的上下界,可以用。Helper函数谁在跟谁比要想清楚。

中序遍历:如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树。这里只能用非递归遍历,因为要用栈进行元素间的比较。

先是左子树一溜进栈,取栈顶用最后指向右子树(在循环里),返回false的条件是<=low,low一直在更新。

  1. 给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。这个难度是简单吗?我第一思路是遍历,把值放数组里,再挨个看有没有匹配的。但是想想就空间复杂度贼高。

注意set不能【】,只能insert来插入。自己能做出来

  1. 返回:最近公共祖先,表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。应该用dfs,但是我好像不会呢。

其实不用dfs,用一个while循环,用bst特性最后返回ancestor。

注意if和else if是不一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值