コード例 #1
0
        // Level Order: like LILO
        public IEnumerable <BiTreeNode <T> > LevelOrder(BiTreeNode <T> root)
        {
            if (root == null)
            {
                yield break;
            }

            var queue = new LinkedQueue <BiTreeNode <T> >();

            queue.In(root);
            while (!queue.IsEmpty())
            {
                var node = queue.Out();
                yield return(node);

                if (node.LeftChild != null)
                {
                    queue.In(node.LeftChild);
                }
                if (node.RightChild != null)
                {
                    queue.In(node.RightChild);
                }
            }
        }
コード例 #2
0
 public HuffmanTreeNode(
     T weight,
     BiTreeNode <T> left_child,
     BiTreeNode <T> right_child,
     BiTreeNode <T> parent) : base(weight, left_child, right_child)
 {
     Parent = parent;
 }
コード例 #3
0
        public BiTreeNode <T> InsertRight(T val, BiTreeNode <T> parent)
        {
            var tmp = new BiTreeNode <T>(val)
            {
                RightChild = parent.RightChild
            };

            parent.RightChild = tmp;
            return(tmp);
        }
コード例 #4
0
        public BiTreeNode <T> InsertLeft(T val, BiTreeNode <T> parent)
        {
            var tmp = new BiTreeNode <T>(val)
            {
                LeftChild = parent.LeftChild
            };

            parent.LeftChild = tmp;
            return(tmp);
        }
コード例 #5
0
        public BiTreeNode <T> DeleteRight(BiTreeNode <T> p)
        {
            if (p?.RightChild == null)
            {
                return(null);
            }
            var tmp = p.RightChild;

            p.RightChild = null;
            return(tmp);
        }
コード例 #6
0
        public BiTreeNode <T> DeleteLeft(BiTreeNode <T> p)
        {
            if (p?.LeftChild == null) // p == null || p.LeftChild == null
            {
                return(null);
            }
            var tmp = p.LeftChild;

            p.LeftChild = null;
            return(tmp);
        }
コード例 #7
0
 // LRD: first left subtree, then right subtree, finally root
 public IEnumerable <BiTreeNode <T> > PostOrder(BiTreeNode <T> root)
 {
     if (root == null)
     {
         yield break;
     }
     foreach (var node in PostOrder(root.LeftChild))
     {
         yield return(node);
     }
     foreach (var node in PostOrder(root.RightChild))
     {
         yield return(node);
     }
     yield return(root);
 }
コード例 #8
0
 public bool IsLeaf(BiTreeNode <T> p)
 {
     return((p != null) && (p.LeftChild == null) && (p.RightChild == null));
 }
コード例 #9
0
 public BiTreeNode <T> GetRightChild(BiTreeNode <T> parent)
 {
     return(parent.RightChild);
 }
コード例 #10
0
 public BiTreeNode <T> GetLeftChild(BiTreeNode <T> parent)
 {
     return(parent.LeftChild);
 }
コード例 #11
0
 public BiTree(T val, BiTreeNode <T> left_child, BiTreeNode <T> right_child)
 {
     Head = new BiTreeNode <T>(val, left_child, right_child);
 }
コード例 #12
0
 public BiTree(T val)
 {
     Head = new BiTreeNode <T>(val);
 }
コード例 #13
0
 public BiTree()
 {
     Head = null;
 }