|
发表于 2008-11-16 14:40:10
|
显示全部楼层
<p>还没学...百度了一个,嘿嘿</p>
<p> </p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>'二叉树的结点类 <br/>Option Explicit <br/>Private mNodeValue As String '结点值 <br/>Private mLeftNode As clsBiTreeNode '左结点 <br/>Private mRightNode As clsBiTreeNode '右结点 <br/><br/>'得到结点的值 <br/>Public Property Get NodeValue() As String <br/>NodeValue = mNodeValue <br/>End Property <br/><br/>'设置结点的值 <br/>Public Property Let NodeValue(ByVal pNodeValue As String) <br/>mNodeValue = pNodeValue <br/>End Property <br/><br/>'得到左结点 <br/>Public Property Get LeftNode() As clsBiTreeNode <br/>Set LeftNode = mLeftNode <br/>End Property <br/><br/>'设置左结点 <br/>Public Property Let LeftNode(ByVal pLeftNode As clsBiTreeNode) <br/>Set mLeftNode = pLeftNode <br/>End Property <br/><br/>'得到右结点 <br/>Public Property Get RightNode() As clsBiTreeNode <br/>Set RightNode = mRightNode <br/>End Property <br/><br/>'设置右结点 <br/>Public Property Let RightNode(ByVal pRightNode As clsBiTreeNode) <br/>Set mRightNode = pRightNode <br/>End Property <br/><br/>----------------------- <br/>'一个二叉树的类 <br/>Option Explicit <br/>Private mRoot As clsBiTreeNode <br/><br/>'建立一棵二叉树,同时以strValue为值建立根结点 <br/>Public Sub CreateTree(strValue As String) <br/>Set mRoot = New clsBiTreeNode <br/>mRoot.NodeValue = strValue <br/>End Sub <br/><br/>'求二叉树的根结点 <br/>Public Function Root() As clsBiTreeNode <br/>Set Root = mRoot <br/>End Function <br/><br/>'求二叉树中值为strValue的结点的双亲 <br/>Public Function Parent(strValue As String) As clsBiTreeNode <br/>Dim NodeTemp As clsBiTreeNode <br/>FindNode mRoot, strValue, NodeTemp <br/>Set Parent = NodeTemp <br/>End Function <br/><br/>'求二叉树T中值为strValue的结点的左孩子 <br/>Public Function LeftChild(strValue As String) As clsBiTreeNode <br/>Dim NodeTemp As clsBiTreeNode <br/>Set LeftChild = Nothing <br/>Set NodeTemp = FindNode(mRoot, strValue) <br/>If Not NodeTemp Is Nothing Then Set LeftChild = NodeTemp.LeftNode <br/>End Function <br/><br/>'求二叉树T中值为strValue的结点的右孩子 <br/>Public Function RightChild(strValue As String) As clsBiTreeNode <br/>Dim NodeTemp As clsBiTreeNode <br/>Set RightChild = Nothing <br/>Set NodeTemp = FindNode(mRoot, strValue) <br/>If Not NodeTemp Is Nothing Then Set RightChild = NodeTemp.RightNode <br/>End Function <br/><br/>'遍历二叉树:采用前序遍历******************* <br/>Public Sub TraverseF(ByRef Node As clsBiTreeNode) <br/>If Node Is Nothing Then Exit Sub <br/>Debug.Print Node.NodeValue & ":" <br/>Traverse Node.LeftNode <br/>Traverse Node.RightNode <br/>End Sub <br/><br/>'遍历二叉树:采用中序遍历***************** <br/>Public Sub TraverseM(ByRef Node As clsBiTreeNode) <br/>If Node Is Nothing Then Exit Sub <br/>Traverse Node.LeftNode <br/>Debug.Print Node.NodeValue & ":" <br/>Traverse Node.RightNode <br/>End Sub <br/><br/>'遍历二叉树:采用后序遍历*************** <br/>Public Sub TraverseB(ByRef Node As clsBiTreeNode) <br/>If Node Is Nothing Then Exit Sub <br/>Traverse Node.LeftNode <br/>Traverse Node.RightNode <br/>Debug.Print Node.NodeValue & ":" <br/>End Sub <br/><br/>'查找值为strValue的(第一个)结点:采用前序遍历 <br/>'参数说明: <br/>'Node为树的根结点 <br/>'strValue要查找的结点的值 <br/>'myParentNode为要查找的结点的双亲结点 <br/>'pParentNode为第一个参数Node结点的双亲结点,是为了保存双亲结点而设置 <br/>Private Function FindNode(ByRef Node As clsBiTreeNode, ByVal strValue As String, Optional ByRef myParentNode As clsBiTreeNode, Optional ByRef pParentNode As clsBiTreeNode) As clsBiTreeNode <br/>Dim NodeTemp As clsBiTreeNode <br/>Set FindNode = Nothing <br/>'如果为空则退出 <br/>If Node Is Nothing Then <br/>Exit Function <br/>End If <br/>If Node.NodeValue = strValue Then <br/>Set FindNode = Node <br/>Set myParentNode = pParentNode <br/>Exit Function <br/>Else <br/>Set NodeTemp = FindNode(Node.LeftNode, strValue, myParentNode, Node) <br/>If Not NodeTemp Is Nothing Then <br/>Set FindNode = NodeTemp <br/>Set pParentNode = Node <br/>Exit Function <br/>End If <br/>Set NodeTemp = FindNode(Node.RightNode, strValue, myParentNode, Node) <br/>If Not NodeTemp Is Nothing Then <br/>Set FindNode = NodeTemp <br/>Set pParentNode = Node <br/>Exit Function <br/>End If <br/>End If <br/>End Function <br/><br/>'在二叉树中,将值为strChild的结点作为值为strParetn的结点的左孩子插入:返回""表示成功,否则返回错误信息 <br/>Public Function AddLeftChild(ByVal strParent As String, ByVal strChild As String) As String <br/>Dim NodeTemp As clsBiTreeNode <br/>AddLeftChild = "" <br/>Set NodeTemp = FindNode(mRoot, strParent) <br/>If NodeTemp Is Nothing Then <br/>AddLeftChild = "没有找到值为" & strParent & "的结点" <br/>End If <br/>If NodeTemp.LeftNode Is Nothing Then <br/>Dim NewNode As New clsBiTreeNode <br/>NewNode.NodeValue = strChild <br/>NodeTemp.LeftNode = NewNode <br/>Else <br/>AddLeftChild = "值为" & strParent & "的结点的左结点已经存在" <br/>End If <br/><br/>End Function <br/><br/><br/>'在二叉树中,将值为strChild的结点作为值为strParetn的结点的右孩子插入:返回""表示成功,否则返回错误信息 <br/>Public Function AddRightChild(ByVal strParent As String, ByVal strChild As String) As String <br/>Dim NodeTemp As clsBiTreeNode <br/>AddRightChild = "" <br/>Set NodeTemp = FindNode(mRoot, strParent) <br/>If NodeTemp Is Nothing Then <br/>AddRightChild = "没有找到值为" & strParent & "的结点" <br/>End If <br/>If NodeTemp.RightNode Is Nothing Then <br/>Dim NewNode As New clsBiTreeNode <br/>NewNode.NodeValue = strChild <br/>NodeTemp.RightNode = NewNode <br/>Else <br/>AddRightChild = "值为" & strParent & "的结点的右结点已经存在" <br/>End If <br/><br/>End Function <br/><br/>'在二叉树中,删除值为strValue的结点的左孩子:返回""表示成功,否则返回错误信息 <br/>Public Function DelLeftChild(ByVal strValue As String) As String <br/>Dim NodeTemp As clsBiTreeNode <br/>DelLeftChild = "" <br/>Set NodeTemp = FindNode(mRoot, strValue) <br/>If NodeTemp Is Nothing Then <br/>DelLeftChild = "没有找到值为" & strValue & "的结点" <br/>End If <br/>If Not NodeTemp.LeftNode Is Nothing Then <br/>NodeTemp.LeftNode = Nothing <br/>End If <br/><br/>End Function <br/><br/>'在二叉树中,删除值为strValue的结点的右孩子:返回""表示成功,否则返回错误信息 <br/>Public Function DelRightChild(ByVal strValue As String) As String <br/>Dim NodeTemp As clsBiTreeNode <br/>DelRightChild = "" <br/>Set NodeTemp = FindNode(mRoot, strValue) <br/>If NodeTemp Is Nothing Then <br/>DelRightChild = "没有找到值为" & strValue & "的结点" <br/>End If <br/>If Not NodeTemp.RightNode Is Nothing Then <br/>NodeTemp.RightNode = Nothing <br/>End If <br/><br/>End Function </p></blockquote> |
|