#includeusing namespace std; //定义二叉树节点 class binarynode { public: char ch; //节点数据域 binarynode* lchild; //左孩子 binarynode* rchild; //右孩子 }; //递归遍历 //先序 void recursion_dlr(binarynode* root) { if (root == NULL) { return; } //遍历根节点 cout << root->ch << "t"; //遍历左子树 recursion_dlr(root->lchild); //遍历右子树 recursion_dlr(root->rchild); } //中序 void recursion_ldr(binarynode* root) { if (root == NULL) { return; } //遍历左子树 recursion_ldr(root->lchild); //遍历根节点 cout << root->ch << "t"; //遍历右子树 recursion_ldr(root->rchild); } //后序 void recursion_lrd(binarynode* root) { if (root == NULL) { return; } //遍历左子树 recursion_lrd(root->lchild); //遍历右子树 recursion_lrd(root->rchild); //遍历根节点 cout << root->ch << "t"; } //创建二叉树 void createtree() { //创建节点 binarynode node1 = { 'A',NULL,NULL }; binarynode node2 = { 'B',NULL,NULL }; binarynode node3 = { 'C',NULL,NULL }; binarynode node4 = { 'D',NULL,NULL }; binarynode node5 = { 'E',NULL,NULL }; binarynode node6 = { 'F',NULL,NULL }; binarynode node7 = { 'G',NULL,NULL }; binarynode node8 = { 'H',NULL,NULL }; //建立节点关系 node1.lchild = &node2; node1.rchild = &node6; node2.rchild = &node3; node3.lchild = &node4; node3.rchild = &node5; node6.rchild = &node7; node7.lchild = &node8; cout << "先序遍历:" << endl; recursion_dlr(&node1); cout << endl; cout << "中序遍历:" << endl; recursion_ldr(&node1); cout << endl; cout << "后序遍历:" << endl; recursion_lrd(&node1); cout << endl; } int main() { createtree(); system("pause"); return 0; }
#includeusing namespace std; typedef struct STreeNode* pSTreeNode; typedef int TreeDataType; struct STreeNode { TreeDataType data; pSTreeNode pFirstChild; pSTreeNode pNextBrother; STreeNode(TreeDataType Value) { data = Value; pFirstChild = NULL; pNextBrother = NULL; } }; class CTree { public: CTree(); CTree(TreeDataType Value); ~CTree(); public: void Insert(TreeDataType parentValue, TreeDataType Value); // parentValue:该节点的父结点;Value:该节点的值 void InsertBrother(pSTreeNode pParentNode, TreeDataType Value); pSTreeNode Search(pSTreeNode pNode, TreeDataType Value); void Preorder(pSTreeNode pNode); // 前序遍历 void Inorder(pSTreeNode pNode); // 中序遍历 void postorder(pSTreeNode pNode); // 后续遍历 void PrintNode(pSTreeNode pNode); void FreeMemory(pSTreeNode pNode); // 释放内存 public: pSTreeNode pRoot; }; CTree::CTree() { pRoot = NULL; } CTree::CTree(TreeDataType Value) { pRoot = new STreeNode(Value); if (pRoot == NULL) return; } CTree::~CTree() { if (pRoot == NULL) return; FreeMemory(pRoot); } void CTree::FreeMemory(pSTreeNode pNode) { if (pNode == NULL) return; if (pNode->pFirstChild != NULL) FreeMemory(pNode->pFirstChild); if (pNode->pNextBrother != NULL) FreeMemory(pNode->pNextBrother); delete pNode; pNode = NULL; } void CTree::Insert(TreeDataType parentValue, TreeDataType Value) { if (pRoot == NULL) return; pSTreeNode pFindNode = Search(pRoot, parentValue); if (pFindNode == NULL) return; if (pFindNode->pFirstChild == NULL) { pFindNode->pFirstChild = new STreeNode(Value); return; } else { InsertBrother(pFindNode->pFirstChild, Value); return; } } void CTree::InsertBrother(pSTreeNode pBrotherNode, TreeDataType Value) { if (pBrotherNode->pNextBrother != NULL) InsertBrother(pBrotherNode->pNextBrother, Value); else { pBrotherNode->pNextBrother = new STreeNode(Value); return; } } pSTreeNode CTree::Search(pSTreeNode pNode, TreeDataType Value) { if (pNode == NULL) return NULL; if (pNode->data == Value) return pNode; if (pNode->pFirstChild == NULL && pNode->pNextBrother == NULL) return NULL; else { if (pNode->pFirstChild != NULL) { pSTreeNode pNodeTemp = Search(pNode->pFirstChild, Value); if (pNodeTemp != NULL) return pNodeTemp; else { return Search(pNode->pNextBrother, Value); } } else return Search(pNode->pNextBrother, Value); } } void CTree::Preorder(pSTreeNode pNode) { if (pNode == NULL) return; cout << " " << pNode->data << " "; Preorder(pNode->pFirstChild); Preorder(pNode->pNextBrother); } void CTree::Inorder(pSTreeNode pNode) { if (pNode == NULL) return; Inorder(pNode->pFirstChild); cout << " " << pNode->data << " "; Inorder(pNode->pNextBrother); } void CTree::postorder(pSTreeNode pNode) { if (pNode == NULL) return; postorder(pNode->pFirstChild); postorder(pNode->pNextBrother); cout << " " << pNode->data << " "; } int main() { CTree* pTree = new CTree(1); if (pTree == NULL) return 0; pTree->Insert(1, 2); pTree->Insert(1, 3); pTree->Insert(1, 4); pTree->Insert(1, 5); pTree->Insert(1, 6); pTree->Insert(1, 7); pTree->Insert(4, 8); pTree->Insert(5, 9); pTree->Insert(5, 10); pTree->Insert(6, 11); pTree->Insert(6, 12); pTree->Insert(6, 13); pTree->Insert(10, 14); pTree->Insert(10, 15); cout << "前序遍历:" << endl; pTree->Preorder(pTree->pRoot); cout << endl; cout << "中序遍历:" << endl; pTree->Inorder(pTree->pRoot); cout << endl; cout << "后序遍历:" << endl; pTree->postorder(pTree->pRoot); cout << endl; delete pTree; pTree = NULL; system("pause"); return 1; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)