コード例 #1
0
        public IIterator Next()
        {
            while (nodesStack.Count > 0)
            {
                if (currentNode != null && currentNode != currentBackupNode)                 //当前结点不空并且没有被访问过
                {
                    nodesStack.Push(currentNode);
                    currentNode = currentNode.LeftChild;
                }
                else
                {
                    currentNode = nodesStack.Pop() as IBiTreeNode;                                     //当前currentNode保存最左边结点

                    if (currentNode.RightChild != null && currentNode.RightChild != currentBackupNode) //当前结点的右结点不空并且没有被访问过
                    {
                        nodesStack.Push(currentNode);
                        currentNode = currentNode.RightChild;
                    }
                    else
                    {
                        currentBackupNode = currentNode;
                        break;
                    }
                }
            }

            return(this);
        }
コード例 #2
0
		public IIterator Next()
		{
			while(nodesStack.Count > 0)
			{
				if(currentNode != null && currentNode != currentBackupNode)  //当前结点不空并且没有被访问过
				{
					nodesStack.Push(currentNode);
					currentNode = currentNode.LeftChild;
				}
				else
				{	
					currentNode = nodesStack.Pop() as IBiTreeNode;  //当前currentNode保存最左边结点

					if(currentNode.RightChild != null && currentNode.RightChild != currentBackupNode)  //当前结点的右结点不空并且没有被访问过
					{
						nodesStack.Push(currentNode);
						currentNode = currentNode.RightChild;
					}
					else
					{
						currentBackupNode = currentNode;
						break;
					}
				}
			}

			return this;
		}
コード例 #3
0
        public IIterator First()
        {
            nodesStack.Clear();
            currentBackupNode = null;            //注意,这里不能忘了,第一次不用保存刚刚被遍历的结点
            currentNode       = rootNode;        //先指向根结点
            nodesStack.Push(currentNode);

            while (nodesStack.Count > 0)
            {
                if (currentNode != null && currentNode != currentBackupNode)                 //当前结点不空并且没有被访问过
                {
                    nodesStack.Push(currentNode);
                    currentNode = currentNode.LeftChild;
                }
                else
                {
                    currentNode = nodesStack.Pop() as IBiTreeNode;                                     //当前currentNode保存最左边结点

                    if (currentNode.RightChild != null && currentNode.RightChild != currentBackupNode) //当前结点的右结点不空并且没有被访问过
                    {
                        nodesStack.Push(currentNode);
                        currentNode = currentNode.RightChild;
                    }
                    else
                    {
                        currentBackupNode = currentNode;
                        break;
                    }
                }
            }

            return(this);
        }
コード例 #4
0
        public IIterator First()
        {
            nodesStack.Clear();
            currentNode = rootNode;

            return(this);
        }
コード例 #5
0
		public IIterator First()
		{
			nodesStack.Clear();
			currentBackupNode = null; //注意,这里不能忘了,第一次不用保存刚刚被遍历的结点
			currentNode = rootNode;  //先指向根结点
			nodesStack.Push(currentNode);

			while(nodesStack.Count > 0)
			{
				if(currentNode != null && currentNode != currentBackupNode)  //当前结点不空并且没有被访问过
				{
					nodesStack.Push(currentNode);
					currentNode = currentNode.LeftChild;
				}
				else
				{	
					currentNode = nodesStack.Pop() as IBiTreeNode;  //当前currentNode保存最左边结点

					if(currentNode.RightChild != null && currentNode.RightChild != currentBackupNode)  //当前结点的右结点不空并且没有被访问过
					{
						nodesStack.Push(currentNode);
						currentNode = currentNode.RightChild;
					}
					else
					{
						currentBackupNode = currentNode;
						break;
					}
				}
			}
			
			return this;
		}
コード例 #6
0
		public IIterator First()
		{
			nodesStack.Clear();
			currentNode = rootNode;

			return this;
		}
コード例 #7
0
        BiTreeLineNode CreateLineNode(IBiTreeNode treeNode1, IBiTreeNode treeNode2)
        {
            int x1, y1, x2, y2;

            if (treeNode1 == treeNode2)             //如果是根结点,就不画出来
            {
                return(new BiTreeLineNode(1, 1, 1, 1, 1, Color.Transparent));
            }
            x1 = treeNode1.Bounds.X + treeNode1.Bounds.Width / 2;
            x2 = treeNode2.Bounds.X + treeNode2.Bounds.Width / 2;
            y1 = treeNode1.Bounds.Y + treeNode1.Bounds.Height;
            y2 = treeNode2.Bounds.Y;

            return(new BiTreeLineNode(x1, y1, x2, y2, 2, lineColor));
        }
コード例 #8
0
        public IIterator Next()
        {
            currentNode = currentNode.RightChild;

            while (currentNode != null || nodesStack.Count > 0)
            {
                if (currentNode != null)
                {
                    nodesStack.Push(currentNode);
                    currentNode = currentNode.LeftChild;
                }
                else
                {
                    currentNode = nodesStack.Pop() as IBiTreeNode;
                    break;
                }
            }

            return(this);
        }
コード例 #9
0
		public IIterator Next()
		{
			currentNode = currentNode.RightChild;

			while(currentNode != null || nodesStack.Count > 0)
			{
				if(currentNode != null)
				{
					nodesStack.Push(currentNode);
					currentNode = currentNode.LeftChild;
				}
				else
				{
					currentNode = nodesStack.Pop() as IBiTreeNode;
					break;
				}
			}

			return this;
		}
コード例 #10
0
		public BiTreeInOrderIterator(IBiTreeNode rootNode)
		{
			this.rootNode = rootNode;
		}
コード例 #11
0
		public void PopupToCurrentNode()
		{
			currentNode = (IBiTreeNode)nodesStack.Pop();
		}
コード例 #12
0
 public void PopupToCurrentNode()
 {
     currentNode = (IBiTreeNode)nodesStack.Pop();
 }
コード例 #13
0
 public void SetToRightChild()
 {
     currentNode = currentNode.RightChild;
 }
コード例 #14
0
 public void SetToLeftChild()
 {
     currentNode = currentNode.LeftChild;
 }
コード例 #15
0
 public void SetToNewNode(IBiTreeNode newNode)
 {
     currentNode = newNode;
 }
コード例 #16
0
 public BiTreePreOrderIterator(IBiTreeNode rootNode)
 {
     this.rootNode = rootNode;
 }
コード例 #17
0
 public void SetToRootNode()
 {
     currentNode = rootNode;
 }
コード例 #18
0
		public void SetToLeftChild()
		{
			currentNode = currentNode.LeftChild;
		}
コード例 #19
0
        public void GenerateTree1(int diameter, Color backColor)
        {
            leftSpan  = 20;
            topSpan   = 5;
            colWidth  = 30;
            rowHeight = 30;

            AssignArrayValues();

            //先创建根结点(在二维数组中的位置为[0,7])
            rootNode = CreateBiTreeNode(0, 7, diameter, backColor);
            IBiTreeNode currentNode;
            IBiTreeNode parentNode      = rootNode;
            IBiTreeNode tempParentNode0 = rootNode;              //用来暂时保存根结点

            rootLineNode = CreateLineNode(rootNode, rootNode);
            IBiTreeNode currentLineNode;
            IBiTreeNode parentLineNode      = rootLineNode;
            IBiTreeNode tempParentLineNode0 = rootLineNode;              //用来暂时保存根结点

            if (flagArray[2, 3] == true)
            {
                currentNode     = CreateBiTreeNode(2, 3, diameter, backColor);
                currentLineNode = CreateLineNode(parentNode, currentNode);

                parentNode.LeftChild = currentNode;
                parentNode           = currentNode;
                IBiTreeNode tempParentNode1 = currentNode;

                parentLineNode.LeftChild = currentLineNode;
                parentLineNode           = currentLineNode;
                IBiTreeNode tempParentLineNode1 = currentLineNode;                  //同样用来保存某个结点

                if (flagArray[4, 1] == true)
                {
                    currentNode     = CreateBiTreeNode(4, 1, diameter, backColor);
                    currentLineNode = CreateLineNode(parentNode, currentNode);

                    parentNode.LeftChild = currentNode;
                    parentNode           = currentNode;

                    parentLineNode.LeftChild = currentLineNode;
                    parentLineNode           = currentLineNode;

                    if (flagArray[6, 0] == true)
                    {
                        currentNode     = CreateBiTreeNode(6, 0, diameter, backColor);
                        currentLineNode = CreateLineNode(parentNode, currentNode);

                        parentNode.LeftChild     = currentNode;
                        parentLineNode.LeftChild = currentLineNode;
                    }
                    if (flagArray[6, 2] == true)
                    {
                        currentNode     = CreateBiTreeNode(6, 2, diameter, backColor);
                        currentLineNode = CreateLineNode(parentNode, currentNode);

                        parentNode.RightChild     = currentNode;
                        parentLineNode.RightChild = currentLineNode;
                    }
                }
                if (flagArray[4, 5] == true)
                {
                    currentNode = CreateBiTreeNode(4, 5, diameter, backColor);

                    parentNode     = tempParentNode1;
                    parentLineNode = tempParentLineNode1;

                    currentLineNode = CreateLineNode(parentNode, currentNode);

                    parentNode.RightChild = currentNode;
                    parentNode            = currentNode;

                    parentLineNode.RightChild = currentLineNode;
                    parentLineNode            = currentLineNode;

                    if (flagArray[6, 4] == true)
                    {
                        currentNode     = CreateBiTreeNode(6, 4, diameter, backColor);
                        currentLineNode = CreateLineNode(parentNode, currentNode);

                        parentNode.LeftChild     = currentNode;
                        parentLineNode.LeftChild = currentLineNode;
                    }
                    if (flagArray[6, 6] == true)
                    {
                        currentNode     = CreateBiTreeNode(6, 6, diameter, backColor);
                        currentLineNode = CreateLineNode(parentNode, currentNode);

                        parentNode.RightChild     = currentNode;
                        parentLineNode.RightChild = currentLineNode;
                    }
                }
            }

            if (flagArray[2, 11] == true)
            {
                currentNode = CreateBiTreeNode(2, 11, diameter, backColor);

                parentNode     = tempParentNode0;
                parentLineNode = tempParentLineNode0;

                currentLineNode = CreateLineNode(parentNode, currentNode);

                parentNode.RightChild     = currentNode;
                parentLineNode.RightChild = currentLineNode;

                parentNode     = currentNode;
                parentLineNode = currentLineNode;

                IBiTreeNode tempParentNode2     = currentNode;              //同样用来保存某个结点
                IBiTreeNode tempParentLineNode2 = currentLineNode;          //同样用来保存某个结点

                if (flagArray[4, 9] == true)
                {
                    currentNode     = CreateBiTreeNode(4, 9, diameter, backColor);
                    currentLineNode = CreateLineNode(parentNode, currentNode);

                    parentNode.LeftChild     = currentNode;
                    parentLineNode.LeftChild = currentLineNode;

                    parentNode     = currentNode;
                    parentLineNode = currentLineNode;

                    if (flagArray[6, 8] == true)
                    {
                        currentNode     = CreateBiTreeNode(6, 8, diameter, backColor);
                        currentLineNode = CreateLineNode(parentNode, currentNode);

                        parentNode.LeftChild     = currentNode;
                        parentLineNode.LeftChild = currentLineNode;
                    }
                    if (flagArray[6, 10] == true)
                    {
                        currentNode     = CreateBiTreeNode(6, 10, diameter, backColor);
                        currentLineNode = CreateLineNode(parentNode, currentNode);

                        parentNode.RightChild     = currentNode;
                        parentLineNode.RightChild = currentLineNode;
                    }
                }
                if (flagArray[4, 13] == true)
                {
                    currentNode = CreateBiTreeNode(4, 13, diameter, backColor);

                    parentNode     = tempParentNode2;
                    parentLineNode = tempParentLineNode2;

                    currentLineNode = CreateLineNode(parentNode, currentNode);

                    parentNode.RightChild = currentNode;
                    parentNode            = currentNode;

                    parentLineNode.RightChild = currentLineNode;
                    parentLineNode            = currentLineNode;

                    if (flagArray[6, 12] == true)
                    {
                        currentNode     = CreateBiTreeNode(6, 12, diameter, backColor);
                        currentLineNode = CreateLineNode(parentNode, currentNode);

                        parentNode.LeftChild     = currentNode;
                        parentLineNode.LeftChild = currentLineNode;
                    }
                    if (flagArray[6, 14] == true)
                    {
                        currentNode     = CreateBiTreeNode(6, 14, diameter, backColor);
                        currentLineNode = CreateLineNode(parentNode, currentNode);

                        parentNode.RightChild     = currentNode;
                        parentLineNode.RightChild = currentLineNode;
                    }
                }
            }

            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 15; j++)
                {
                    Console.Write(charArray[i, j] + " ");
                }
                Console.WriteLine();
            }
        }
コード例 #20
0
		public void SetToNewNode(IBiTreeNode newNode)
		{
			currentNode = newNode;
		}
コード例 #21
0
		public void SetToRootNode()
		{
			currentNode = rootNode;
		}
コード例 #22
0
		BiTreeLineNode CreateLineNode(IBiTreeNode treeNode1,IBiTreeNode treeNode2)
		{
			int x1,y1,x2,y2;
			if(treeNode1 == treeNode2)  //如果是根结点,就不画出来
			{
				return new BiTreeLineNode(1,1,1,1,1,Color.Transparent);
			}
			x1 = treeNode1.Bounds.X + treeNode1.Bounds.Width / 2;
			x2 = treeNode2.Bounds.X + treeNode2.Bounds.Width / 2;
			y1 = treeNode1.Bounds.Y + treeNode1.Bounds.Height;
			y2 = treeNode2.Bounds.Y;

			return new BiTreeLineNode(x1,y1,x2,y2,2,lineColor);

		}
コード例 #23
0
		public void SetToRightChild()
		{
			currentNode = currentNode.RightChild;
		}
コード例 #24
0
		public void GenerateTree1(int diameter,Color backColor)
		{
			leftSpan = 20;
			topSpan = 5;
			colWidth = 30;
			rowHeight = 30;

			AssignArrayValues();

			//先创建根结点(在二维数组中的位置为[0,7])
			rootNode = CreateBiTreeNode(0,7,diameter,backColor);
			IBiTreeNode currentNode;
			IBiTreeNode parentNode = rootNode;
			IBiTreeNode tempParentNode0 = rootNode;  //用来暂时保存根结点

			rootLineNode = CreateLineNode(rootNode,rootNode);
			IBiTreeNode currentLineNode;
			IBiTreeNode parentLineNode = rootLineNode;
			IBiTreeNode tempParentLineNode0 = rootLineNode;  //用来暂时保存根结点

			if(flagArray[2,3] == true)
			{
				currentNode = CreateBiTreeNode(2,3,diameter,backColor);
				currentLineNode = CreateLineNode(parentNode,currentNode);

				parentNode.LeftChild = currentNode;
				parentNode = currentNode;
				IBiTreeNode tempParentNode1 = currentNode;
				
				parentLineNode.LeftChild = currentLineNode;
				parentLineNode = currentLineNode;
				IBiTreeNode tempParentLineNode1 = currentLineNode;  //同样用来保存某个结点

				if(flagArray[4,1] == true)
				{
					currentNode = CreateBiTreeNode(4,1,diameter,backColor);
					currentLineNode = CreateLineNode(parentNode,currentNode);

					parentNode.LeftChild = currentNode;
					parentNode = currentNode;

					parentLineNode.LeftChild = currentLineNode;
					parentLineNode = currentLineNode;

					if(flagArray[6,0] == true)
					{
						currentNode = CreateBiTreeNode(6,0,diameter,backColor);
						currentLineNode = CreateLineNode(parentNode,currentNode);

						parentNode.LeftChild = currentNode;
						parentLineNode.LeftChild = currentLineNode;
					}
					if(flagArray[6,2] == true)
					{
						currentNode = CreateBiTreeNode(6,2,diameter,backColor);
						currentLineNode = CreateLineNode(parentNode,currentNode);

						parentNode.RightChild = currentNode;
						parentLineNode.RightChild = currentLineNode;
					}

				}
				if(flagArray[4,5] == true)
				{
					currentNode = CreateBiTreeNode(4,5,diameter,backColor);

					parentNode = tempParentNode1;
					parentLineNode = tempParentLineNode1;

					currentLineNode = CreateLineNode(parentNode,currentNode);
					
					parentNode.RightChild = currentNode;
					parentNode = currentNode;

					parentLineNode.RightChild = currentLineNode;
					parentLineNode = currentLineNode;

					if(flagArray[6,4] == true)
					{
						currentNode = CreateBiTreeNode(6,4,diameter,backColor);
						currentLineNode = CreateLineNode(parentNode,currentNode);

						parentNode.LeftChild = currentNode;
						parentLineNode.LeftChild = currentLineNode;
					}
					if(flagArray[6,6] == true)
					{
						currentNode = CreateBiTreeNode(6,6,diameter,backColor);
						currentLineNode = CreateLineNode(parentNode,currentNode);

						parentNode.RightChild = currentNode;
						parentLineNode.RightChild = currentLineNode;
					}

				}
			}

			if(flagArray[2,11] == true)
			{
				currentNode = CreateBiTreeNode(2,11,diameter,backColor);

				parentNode = tempParentNode0;
				parentLineNode = tempParentLineNode0;

				currentLineNode = CreateLineNode(parentNode,currentNode);

				parentNode.RightChild = currentNode;
				parentLineNode.RightChild = currentLineNode;

				parentNode = currentNode;
				parentLineNode = currentLineNode;

				IBiTreeNode tempParentNode2 = currentNode;  //同样用来保存某个结点
				IBiTreeNode tempParentLineNode2 = currentLineNode;  //同样用来保存某个结点

				if(flagArray[4,9] == true)
				{
					currentNode = CreateBiTreeNode(4,9,diameter,backColor);
					currentLineNode = CreateLineNode(parentNode,currentNode);

					parentNode.LeftChild = currentNode;
					parentLineNode.LeftChild = currentLineNode;

					parentNode = currentNode;
					parentLineNode = currentLineNode;

					if(flagArray[6,8] == true)
					{
						currentNode = CreateBiTreeNode(6,8,diameter,backColor);
						currentLineNode = CreateLineNode(parentNode,currentNode);

						parentNode.LeftChild = currentNode;
						parentLineNode.LeftChild = currentLineNode;
					}
					if(flagArray[6,10] == true)
					{
						currentNode = CreateBiTreeNode(6,10,diameter,backColor);
						currentLineNode = CreateLineNode(parentNode,currentNode);
						
						parentNode.RightChild = currentNode;
						parentLineNode.RightChild = currentLineNode;
					}

				}
				if(flagArray[4,13] == true)
				{
					currentNode = CreateBiTreeNode(4,13,diameter,backColor);

					parentNode = tempParentNode2;
					parentLineNode = tempParentLineNode2;

					currentLineNode = CreateLineNode(parentNode,currentNode);

					parentNode.RightChild = currentNode;
					parentNode = currentNode;

					parentLineNode.RightChild = currentLineNode;
					parentLineNode = currentLineNode;

					if(flagArray[6,12] == true)
					{
						currentNode = CreateBiTreeNode(6,12,diameter,backColor);
						currentLineNode = CreateLineNode(parentNode,currentNode);

						parentNode.LeftChild = currentNode;
						parentLineNode.LeftChild = currentLineNode;
					}
					if(flagArray[6,14] == true)
					{
						currentNode = CreateBiTreeNode(6,14,diameter,backColor);
						currentLineNode = CreateLineNode(parentNode,currentNode);

						parentNode.RightChild = currentNode;
						parentLineNode.RightChild = currentLineNode;
					}

				}
				
			}

			for(int i = 0;i < 7;i++)
			{
				for(int j = 0;j < 15;j++)
				{
					Console.Write(charArray[i,j] + " ");
				}
				Console.WriteLine();
			}
		}