读书人

※数据结构※→☆非线性构造(tree)☆

发布时间: 2013-10-08 16:55:16 作者: rapoo

※数据结构※→☆非线性结构(tree)☆============树结点 链式存储结构(tree node list)(十四)

结点:

包括一个数据元素及若干个指向其它子树的分支;例如,A,B,C,D等。

在数据结构的图形表示中,对于数据集合中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,简称结点。


在C语言中,链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据;二为下一个结点的地址,即指针域和数据域。


数据结构中的每一个数据结点对应于一个储存单元,这种储存单元称为储存结点,也可简称结点


树结点(树节点):

※数据结构※→☆非线性构造(tree)☆============树结点  链式存储结构(tree node list)(十四)


树节点相关术语:

节点的度:一个节点含有的子树的个数称为该节点的度;叶节点或终端节点:度为0的节点称为叶节点;非终端节点或分支节点:度不为0的节点;双亲节点或父节点:若一个结点含有子节点,则这个节点称为其子节点的父节点;孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;兄弟节点:具有相同父节点的节点互称为兄弟节点;节点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;堂兄弟节点:双亲在同一层的节点互为堂兄弟;节点的祖先:从根到该节点所经分支上的所有节点;子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

根据树结点的相关定义,其属性如下:


AL_TreeNode.h

#ifdef TEST_AL_AL_TREENODEAL_TreeNode<DWORD> cTreeNode;cTreeNode.SetLevel(1);DWORD dwLevel = cTreeNode.GetLevel();std::cout<<dwLevel<<std::endl;cTreeNode.SetData(10);DWORD dwData = cTreeNode.GetData();std::cout<<dwData<<std::endl;AL_TreeNode<DWORD> cTreeNodeParent;cTreeNodeParent.SetLevel(0);cTreeNodeParent.SetData(0);cTreeNode.SetParent(0x00, &cTreeNodeParent);AL_TreeNode<DWORD> cTreeNodeChild20(20);cTreeNodeChild20.SetLevel(2);AL_TreeNode<DWORD> cTreeNodeChild21(21);cTreeNodeChild21.SetLevel(2);AL_TreeNode<DWORD> cTreeNodeChild22(22);cTreeNodeChild22.SetLevel(2);AL_TreeNode<DWORD> cTreeNodeChild23(23);cTreeNodeChild23.SetLevel(2);cTreeNode.Insert(0x00, &cTreeNodeChild21);cTreeNode.InsertLeft(&cTreeNodeChild20);cTreeNode.InsertRight(&cTreeNodeChild22);cTreeNode.Insert(0x03, &cTreeNodeChild23);AL_TreeNode<DWORD> cTreeNodeChild30(30);cTreeNodeChild30.SetLevel(3);AL_TreeNode<DWORD> cTreeNodeChild31(31);cTreeNodeChild31.SetLevel(3);AL_TreeNode<DWORD> cTreeNodeChild32(32);cTreeNodeChild32.SetLevel(3);AL_TreeNode<DWORD> cTreeNodeChild33(33);cTreeNodeChild33.SetLevel(3);cTreeNodeChild31.SetParent(0x00, &cTreeNodeChild20);cTreeNodeChild30.SetParentLeft(&cTreeNodeChild20);cTreeNodeChild32.SetParentRight(&cTreeNodeChild20);cTreeNodeChild33.SetParent(0x03, &cTreeNodeChild20 );AL_TreeNode<DWORD>*pParent = NULL;pParent = cTreeNode.GetParent();if (NULL != pParent) {std::cout<<pParent->GetLevel()<<"    "<<pParent->GetData()<<"    "<<pParent->GetDegree()<<std::endl;std::cout<<pParent->IsLeaf()<<"    "<<pParent->IsBranch()<<"    "<<pParent->IsParent(&cTreeNode)<<"    "<<pParent->IsParent(&cTreeNodeChild33)<<std::endl;}AL_TreeNode<DWORD>*pChild = NULL;pChild = cTreeNode.GetChild(0x01);if (NULL != pChild) {std::cout<<pChild->GetLevel()<<"    "<<pChild->GetData()<<"    "<<pChild->GetDegree()<<std::endl;std::cout<<pChild->IsLeaf()<<"    "<<pChild->IsBranch()<<"    "<<pChild->IsParent(&cTreeNode)<<"    "<<pChild->IsParent(&cTreeNodeChild33)<<std::endl;}pChild = cTreeNode.GetChild(0x00);if (NULL != pChild) {std::cout<<pChild->GetLevel()<<"    "<<pChild->GetData()<<"    "<<pChild->GetDegree()<<std::endl;std::cout<<pChild->IsLeaf()<<"    "<<pChild->IsBranch()<<"    "<<pChild->IsParent(&cTreeNode)<<"    "<<pChild->IsParent(&cTreeNodeChild33)<<std::endl;}pChild = cTreeNode.GetChildLeft();if (NULL != pChild) {std::cout<<pChild->GetLevel()<<"    "<<pChild->GetData()<<"    "<<pChild->GetDegree()<<std::endl;std::cout<<pChild->IsLeaf()<<"    "<<pChild->IsBranch()<<"    "<<pChild->IsParent(&cTreeNode)<<"    "<<pChild->IsParent(&cTreeNodeChild33)<<std::endl;}pChild = cTreeNode.GetChild(0x03);if (NULL != pChild) {std::cout<<pChild->GetLevel()<<"    "<<pChild->GetData()<<"    "<<pChild->GetDegree()<<std::endl;std::cout<<pChild->IsLeaf()<<"    "<<pChild->IsBranch()<<"    "<<pChild->IsParent(&cTreeNode)<<"    "<<pChild->IsParent(&cTreeNodeChild33)<<std::endl;}pChild = cTreeNode.GetChildRight();if (NULL != pChild) {std::cout<<pChild->GetLevel()<<"    "<<pChild->GetData()<<"    "<<pChild->GetDegree()<<std::endl;std::cout<<pChild->IsLeaf()<<"    "<<pChild->IsBranch()<<"    "<<pChild->IsParent(&cTreeNode)<<"    "<<pChild->IsParent(&cTreeNodeChild33)<<std::endl;}AL_ListSingle<AL_TreeNode<DWORD>*> cListSingle;AL_TreeNode<DWORD>*pList = NULL;BOOL bSibling = cTreeNode.GetSibling(cListSingle);if (TRUE == bSibling) {for (DWORD dwCnt=0; dwCnt<cListSingle.Length(); dwCnt++) {if (TRUE == cListSingle.Get(pList, dwCnt)) {if (NULL != pList) {std::cout<<pList->GetLevel()<<"    "<<pList->GetData()<<"    "<<pList->GetDegree()<<std::endl;std::cout<<pList->IsLeaf()<<"    "<<pList->IsBranch()<<"    "<<pList->IsParent(&cTreeNode)<<"    "<<pList->IsParent(&cTreeNodeChild33)<<std::endl;}}}}cListSingle.Clear();bSibling = cTreeNodeChild20.GetSibling(cListSingle);if (TRUE == bSibling) {for (DWORD dwCnt=0; dwCnt<cListSingle.Length(); dwCnt++) {if (TRUE == cListSingle.Get(pList, dwCnt)) {if (NULL != pList) {std::cout<<pList->GetLevel()<<"    "<<pList->GetData()<<"    "<<pList->GetDegree()<<std::endl;std::cout<<pList->IsLeaf()<<"    "<<pList->IsBranch()<<"    "<<pList->IsParent(&cTreeNode)<<"    "<<pList->IsParent(&cTreeNodeChild33)<<std::endl;}}}}cListSingle.Clear();bSibling = cTreeNodeParent.GetAncestor(cListSingle);if (TRUE == bSibling) {for (DWORD dwCnt=0; dwCnt<cListSingle.Length(); dwCnt++) {if (TRUE == cListSingle.Get(pList, dwCnt)) {if (NULL != pList) {std::cout<<pList->GetLevel()<<"    "<<pList->GetData()<<"    "<<pList->GetDegree()<<std::endl;std::cout<<pList->IsLeaf()<<"    "<<pList->IsBranch()<<"    "<<pList->IsParent(&cTreeNode)<<"    "<<pList->IsParent(&cTreeNodeChild33)<<std::endl;}}}}bSibling = cTreeNodeChild33.GetAncestor(cListSingle);if (TRUE == bSibling) {for (DWORD dwCnt=0; dwCnt<cListSingle.Length(); dwCnt++) {if (TRUE == cListSingle.Get(pList, dwCnt)) {if (NULL != pList) {std::cout<<pList->GetLevel()<<"    "<<pList->GetData()<<"    "<<pList->GetDegree()<<std::endl;std::cout<<pList->IsLeaf()<<"    "<<pList->IsBranch()<<"    "<<pList->IsParent(&cTreeNode)<<"    "<<pList->IsParent(&cTreeNodeChild33)<<std::endl;}}}}cListSingle.Clear();bSibling = cTreeNodeParent.GetDescendant(cListSingle);if (TRUE == bSibling) {for (DWORD dwCnt=0; dwCnt<cListSingle.Length(); dwCnt++) {if (TRUE == cListSingle.Get(pList, dwCnt)) {if (NULL != pList) {std::cout<<pList->GetLevel()<<"    "<<pList->GetData()<<"    "<<pList->GetDegree()<<std::endl;std::cout<<pList->IsLeaf()<<"    "<<pList->IsBranch()<<"    "<<pList->IsParent(&cTreeNode)<<"    "<<pList->IsParent(&cTreeNodeChild33)<<std::endl;}}}}cListSingle.Clear();bSibling = cTreeNodeChild33.GetDescendant(cListSingle);if (TRUE == bSibling) {for (DWORD dwCnt=0; dwCnt<cListSingle.Length(); dwCnt++) {if (TRUE == cListSingle.Get(pList, dwCnt)) {if (NULL != pList) {std::cout<<pList->GetLevel()<<"    "<<pList->GetData()<<"    "<<pList->GetDegree()<<std::endl;std::cout<<pList->IsLeaf()<<"    "<<pList->IsBranch()<<"    "<<pList->IsParent(&cTreeNode)<<"    "<<pList->IsParent(&cTreeNodeChild33)<<std::endl;}}}}cListSingle.Clear();#endif








读书人网 >编程

热点推荐