113.路径和II
深度优先
450.删除二叉搜索树中的节点
递归+左右子树
关键点在于root->val==key时怎么删除?
root为叶子节点,直接删除,返回空。
root只有左子树,返回root的左子节点。
root只有右子树,返回root的右子节点。
root既有左子树,也有右子树,用左子树的最大节点或右子树的最小节点(找到该节点不是用dfs,直接一致找左节点或者右节点就好)代替root,同时从左右子树中删除该节点,返回root。
203.二叉搜索树中第k小的元素
自己写出来滴。
173.二叉搜索树迭代器(在玩文字游戏???)
BSTIterator(TreeNode*root)
初始化 BSTIterator
类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。
boolean hasNext()
如果向指针右侧遍历存在数字,则返回 true
;否则返回 false
。
int next()
将指针向右移动,然后返回指针处的数字。
236. 二叉树的最近公共祖先
297.二叉树的序列化和反序列化(困难题)
遍历树的方法:
一般有两个策略:广度优先搜索和深度优先搜索。
广度优先搜索可以按照层次的顺序从上到下遍历所有的节点
深度优先搜索可以从一个根开始,一直延伸到某个叶,然后回到根,到达另一个分支。
根据根节点、左节点和右节点之间的相对顺序,可以进一步将深度优先搜索策略区分为: 先序遍历,中序遍历,后序遍历。
序列化:None,None,
是用来标记缺少左、右子节点。
反序列化:先去掉",",用list储存节点的值。再去掉None。
去看java和概率论了QAQ