BN089-BS开发框架MVC4版/source20131023/Zephyr.Net/Zephyr.Utils/Document/Excel/ExcelLibrary/CodeLib/BinaryTree/RedBlackTree/RedBlackTree.cs

(开头部分) 6KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Text;

namespace QiHe.CodeLib
{
    ///<summary>
    ///A red-black tree must satisfy these properties:
    ///1. The root is black. 
    ///2. All leaves are black. 
    ///3. Red nodes can only have black children. 
    ///4. All paths from a node to its leaves contain the same number of black nodes.
    ///</summary>
    public class RedBlackTree<TItem> : BinarySearchTreeBase<TItem, RedBlackTreeNode<TItem>>
        where TItem : IComparable<TItem>
    {
        public override RedBlackTreeNode<TItem> Nil
        {
            get { return RedBlackTreeNode<TItem>.Nil; }
        }

        public override void Insert(RedBlackTreeNode<TItem> node)
        {
            base.Insert(node);
            node.Color = NodeColor.Red;
            FixupAfterInsert(node);
        }

        /// <summary>
        /// restores the red-black properties to the search tree
        /// </summary>
        /// <param name="node"></param>
        private void FixupAfterInsert(RedBlackTreeNode<TItem> node)
        {
            while (node.Parent.Color == NodeColor.Red)
            {
                if (node.Parent.IsLeftChild)
                {
                    RedBlackTreeNode<TItem> uncle = node.Parent.Parent.Right;
                    // case 1
                    if (uncle.Color == NodeColor.Red)
                    {
                        uncle.Color = NodeColor.Black;
                        node.Parent.Color = NodeColor.Black;
                        node.Parent.Parent.Color = NodeColor.Red;
                        node = node.Parent.Parent;
                    }
                    else
                    {
                        // case 2
                        if (node.IsRightChild)
                        {
                            node = node.Parent;
                            RotateLeft(node);
                        }
                        // case 3
                        node.Parent.Color = NodeColor.Black;
                        node.Parent.Parent.Color = NodeColor.Red;
                        RotateRight(node.Parent.Parent);
                    }
后面还有 127 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。