首页 >> 大全

1. 二叉搜索树的最近公共祖先

2023-08-07 大全 28 作者:考证青年

内容:

二叉搜索树的最近公共祖先(235)二叉搜索树中的插入操作(701)删除二叉搜索树中的节点(450) 1. 二叉搜索树的最近公共祖先

难度:

建议:相对于二叉树的最近公共祖先本题就简单一些了,因为可以利用二叉搜索树的特性

1.1 思路分析

普通二叉树求最近公共祖先需要使用回溯,从底向上来查找。

二叉搜索树就不用了,因为搜索树有序(相当于自带方向),那么只要从上向下遍历就可以了。

并且此题只需要遍历一条边。如果当前节点的值大于p,q的值,则需要向左子树去递归搜索,反之向右子树递归搜索

1.2 代码实现

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//本题使用何种遍历都可以if (root == null) {return null;}//如果当前节点的值大于p,q的值,则需要向左子树去递归搜索if (root.val > p.val && root.val > q.val) {TreeNode left = lowestCommonAncestor(root.left,p,q);if (left != null) {return left;}}if (root.val < p.val && root.val < q.val) {TreeNode right = lowestCommonAncestor(root.right,p,q);if (right != null) {return right;}}return root;}
}

二叉排序树公共祖先_求树的最近公共祖先_

1.3 注意事项 1.4 收获总结 2. 二叉搜索树中的插入操作

难度:

建议:本题比想象中简单,可以先自己想一想应该怎么做,然后看视频讲解,就会发现本题为什么比较简单了

2.1 思路分析

只需要按照二叉搜索树的规则去遍历,遇到空节点就插入节点就可以了

如图:

701.二叉搜索树中的插入操作

2.2 代码实现

lass Solution {public TreeNode insertIntoBST(TreeNode root, int val) {//找到叶子节点插入即可,无需改变树的结构if (root == null) {TreeNode node = new TreeNode(val);return node;}if (root.val > val) {root.left = insertIntoBST(root.left,val);}if (root.val < val) {root.right = insertIntoBST(root.right,val);}return root;}
}

2.3 注意事项 2.4 收获总结 3. 删除二叉搜索树中的节点

_求树的最近公共祖先_二叉排序树公共祖先

难度:

建议:相对于插入操作,本题就有难度了,涉及到改树的结构

3.1 思路分析

删除节点有以下五种情况:

第五中情况如图:

450.删除二叉搜索树中的节点

3.2 代码实现

class Solution {public TreeNode deleteNode(TreeNode root, int key) {//终止条件if (root == null) {return null;}//如果找到了要删除的节点,分四种情况讨论if (root.val == key) {//1.叶子节点if (root.left == null && root.right == null) {return null;//2.左不空右空} else if (root.left != null && root.right == null) {return root.left;//3.左空右不空} else if (root.left == null && root.right != null) {return root.right;//4.左右都不为空}else {TreeNode cur = root.right;while (cur.left != null) {cur = cur.left;}//cur此时指向root右子树的左子树中最小的数cur.left = root.left;return root.right;}}if (root.val > key) {root.left = deleteNode(root.left,key);}if (root.val < key) {root.right = deleteNode(root.right,key);}return root;}
}

3.3 注意事项 3.4 收获总结

删除节点涉及到结构的调整所以相对二叉搜索树添加节点要难。

关键在于第五种情况,需要自己去深刻理解。初学掌握递归这种写法就够了。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了