コード例 #1
0
        public void UpdateHeight(AVLTreeNode <T> node)
        {
            if (node == null)
            {
                return;
            }

            node.UpdateHeights();
        }
コード例 #2
0
        private void Delete(AVLTreeNode <T> node, bool balanceWhileDeleting = true)
        {
            if (node.IsLeaf)
            {
                DeleteRootOrLeftOrRightNode(node);
                node.UpdateCounts();
                node.UpdateHeights();
                if (balanceWhileDeleting)
                {
                    Balance(node);
                }
                return;
            }

            if (node.IsRightTreeNull)
            {
                PerformDeleteWhenRightTreeIsNull(node);
                node.UpdateCounts();
                node.UpdateHeights();
                if (balanceWhileDeleting)
                {
                    Balance(node);
                }
                return;
            }

            if (node.IsLeftTreeNull)
            {
                PerformDeleteWhenLeftTreeIsNull(node);
                node.UpdateCounts();
                node.UpdateHeights();
                if (balanceWhileDeleting)
                {
                    Balance(node);
                }
                return;
            }

            var maxOfLeftNode = FindMax(node.Left);

            node.Value = maxOfLeftNode.Value;
            FindNodeToBeDeleted(node.Left, maxOfLeftNode.Value, balanceWhileDeleting);
        }