Jostle Leer
Jostle Leer
> 有个疑问:"情况 3:A 有两个子节点,麻烦了,为了不破坏 BST 的性质,A 必须找到左子树中最大的那个节点,或者右子树中最小的那个节点来接替自己。" 按照性质,应该只能找到右子树最小节点来替代呀,为什么找左子树最大也成立呢 @ryanmingxinzhang 右子树最小和左子树最大不是对称的概念吗,既然右小可以接替原来的root,那左大必然可以,不存在谁更高贵
我发现不对劲的地方,450 题,删除二叉搜索树的节点里面 作者所说的「如果要删除的点的左右孩子都不为 null,那么需要找左子树中最大或右子树中最小的点来接替自己」是没必要的 需要做的只是,让左孩子接替自己,右孩子去自己能去到的最右的地方即可 比如说 {4,2,6,1,3,5,7}(层次遍历顺序)这棵子树需要删掉 4,不一定要 3 或者 5 来代替自己的位置,而是只需要用它的左孩子 2 来代替自己,变成 {2,1,3,null,null,null,6,5,7},同样是合法的 BST 这样就可以简化很多步骤
> @ErronZrz 多思考是好的,但需要用实践来检验想法,不妨把你实现的代码贴出来 @labuladong 代码如下: ```java class Solution { public TreeNode deleteNode(TreeNode root, int key) { if(null==root){ return null; } if(key < root.val){ root.left = deleteNode(root.left, key); }else if(key >...
``` class Solution { private List all = new LinkedList(); public List generateParenthesis(int n) { backtrack("", n, n); return all; } private void backtrack(String now, int l, int r){ if(l+r==0){...
> 有个疑惑,我想请问下 相交链表的那个如果是这种呢 链表A->B->C->D 和链表F->G->C->H->I呢 也就是相交元素只有C元素,后面的并不是两个链表的公共部分,这样的话用逻辑拼接应该不可行了吧? @Money8888 不是,你单链表又不是二叉树,怎么可能C的next会同时有D和H?真的笑到了