本文主要是介绍代码随想录算法训练营第二十二天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
235.二叉搜索树的最近公共祖先
递归法:
public class Solution {public TreeNode LowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root==null){return null;}if(root==p||root==q){return root;}var left=LowestCommonAncestor(root.left,p,q);var right=LowestCommonAncestor(root.right,p,q);if(left!=null&&right!=null){return root;}if(left==null&&right!=null){return right;}else if(left!=null&&right==null){return left;}elsereturn null;}
}
参考二叉树最近公共祖先流程。
701.二叉搜索树中的插入操作
递归法:
public class Solution {public TreeNode InsertIntoBST(TreeNode root, int val) {if(root==null){root=new TreeNode(val);}if(root.val>val){InsertIntoBST(root.left,val);}if(root.val<val){InsertIntoBST(root.right,val);}if(root.val>val&&root.left==null){root.left=new TreeNode(val);return root;}if(root.val<val&&root.right==null){root.right=new TreeNode(val);return root;}return root;}
}
如果根节点为空,直接在根节点处新建一个Val值得节点。得益于二叉搜索树的特性,如果Val值比根节点的值小,就去左子树插入,如果Val值比根节点的值大,就去右子树插入。如果当前节点的值大于Val并且当前节点的右节点为空就在左节点处新建一个Val值节点完成插入操作然后返回根节点,同理当前节点值小于Val且右节点为空就在右节点处插入该值,然后返回根节点。
450.删除二叉搜索树中的节点
递归法:
public class Solution {public TreeNode DeleteNode(TreeNode root, int key) {if(root==null){return null;}if(key==root.val){if(root.left==null&&root.right==null){return null;}if(root.left!=null&&root.right==null){return root.left;}if(root.left==null&&root.right!=null){return root.right;}if(root.left!=null&&root.right!=null){var cur=root.right;while(cur.left!=null){cur=cur.left;}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;}
}
根节点如果为空,直接返回空。如果当前节点等于Key值,则分为以下几种情况:当前节点为叶子节点直接向上返回Null即可,当前节点左节点不为空右节点为空,直接往上返回左节点,当前节点右节点不为空左节点为空,则往上返回右节点。如果当前节点的左右节点都不为空,那就新建一个节点Cur指向右节点然后将Cur向左遍历到叶子结点,接着将该节点的左节点赋值给Cur的左节点,然后向上返回当前节点的右节点即可。得益于二叉搜索树的特性,如果Key值大于当前节点的值则向右进行递归操作,反之往左递归。
这篇关于代码随想录算法训练营第二十二天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!