LeetCode450题—— 删除二叉搜索树中的节点
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                LeetCode450题—— 删除二叉搜索树中的节点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                首先需要認識什么是二叉搜索樹,可以進入百度詞條https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/7077855?fr=aladdin
一定要注意題目要求算法時間復雜度是O(h)。
遞歸方法:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/ class Solution {public TreeNode deleteNode(TreeNode root, int key) {if (root == null)return null;if (key == root.val) {// 1.leafif (root.left == null && root.right == null) {return null;} else if (root.left == null) { // 2.left is nullreturn root.right; } else if (root.right == null) { // 3.right is nullreturn root.left;} else { // 4.left and right are not nullTreeNode rightTreeMin = root.right;while (rightTreeMin.left != null) {rightTreeMin = rightTreeMin.left; //找到右子樹中最小的葉子節點}root.val = rightTreeMin.val;root.right = deleteNode(root.right, rightTreeMin.val);//繼續向當前root節點的右子樹遞歸,此時的key變成了rightTreeMin.val,以達到去刪除這個最小葉子節點的目的}} else if (key > root.val) {root.right = deleteNode(root.right, key);} else { //key<root.valroot.left = deleteNode(root.left, key);}return root;} }參考博文:LeetCode 刪除二叉搜索樹中的節點(450題)遞歸與非遞歸
總結
以上是生活随笔為你收集整理的LeetCode450题—— 删除二叉搜索树中的节点的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: ssh远程执行命令 linux,【Lin
 - 下一篇: java 自定义map_自定义写实现ja