コード例 #1
0
        public static LeetCode450TreeNode DeleteNode(LeetCode450TreeNode root, int key)
        {
            if (root == null)
            {
                return(null);
            }

            if (key > root.val)
            {
                root.right = DeleteNode(root.right, key);
            }
            else if (key < root.val)
            {
                root.left = DeleteNode(root.left, key);
            }
            else
            {
                if (!root.IsLeaf())
                {
                    root = null;
                }
                else if (root.HasRightChild())
                {
                    root.val   = Successor(root);
                    root.right = DeleteNode(root.right, root.val);
                }
                else
                {
                    root.val  = Predecessor(root);
                    root.left = DeleteNode(root.left, root.val);
                }
            }
            return(root);
        }
コード例 #2
0
        private static int Predecessor(LeetCode450TreeNode root)
        {
            root = root.left;
            while (root.right != null)
            {
                root = root.right;
            }

            return(root.val);
        }
コード例 #3
0
 public LeetCode450TreeNode(int val = 0, LeetCode450TreeNode left = null, LeetCode450TreeNode right = null)
 {
     this.val   = val;
     this.left  = left;
     this.right = right;
 }