标签:键盘输入 turn queue ase 函数调用 释放 div 二叉链表 open
中序输入:A、B、C、#、#、#、D、#、#
二叉树的实现以及四种遍历:
1 #include <iostream> 2 #include <string> 3 #include <queue> 4 using namespace std; 5 6 template<class T> 7 struct BiNode { 8 T data; 9 BiNode<T> *lchild, *rchild;//左子树、右子树 10 }; 11 12 template<class T> 13 class BiTree 14 { 15 public: 16 BiTree();//构造函数,初始化二叉树,前序序列由键盘输入 17 ~BiTree();//析构函数,释放二叉链表中的各结点的存储空间 18 BiNode<T>* Getroot();//获得指向根节点的指针 19 void PreOrder(BiNode<T>* root);//前序遍历二叉树 20 void InOrder(BiNode<T>* root);//中序遍历二叉树 21 void PostOrder(BiNode<T>* root);//后序遍历二叉树 22 void LeverOrder(BiNode<T>* root);//层序遍历二叉树 23 private: 24 BiNode<T> *root;//指向根节点的头指针 25 BiNode<T> *Great();//有参构造函数调用 26 void ReLease(BiNode<T> *root);//析构函数调用 27 }; 28 template<class T> 29 BiTree<T>::BiTree() { 30 this->root = Great();//创建对象时,构造函数被调用后,调用Great函数进行初始化 31 } 32 33 template<class T> 34 BiTree<T>::~BiTree() { 35 ReLease(root);//调用ReLease释放二叉树链表 36 } 37 38 template<class T> 39 BiNode<T>* BiTree<T>::Getroot() { 40 return root;//返回根节点地址 41 } 42 43 template<class T> 44 void BiTree<T>::PreOrder(BiNode<T>* root) { 45 if (root == NULL) 46 return; 47 cout << root->data << " "; 48 PreOrder(root->lchild);//前序遍历二叉树(根,左,右) 49 PreOrder(root->rchild); 50 } 51 52 template<class T> 53 void BiTree<T>::InOrder(BiNode<T> *root) { 54 if (root == NULL) 55 return; 56 InOrder(root->lchild);//中序遍历二叉树(左,根,右) 57 cout << root->data << " "; 58 InOrder(root->rchild); 59 } 60 61 template<class T> 62 void BiTree<T>::PostOrder(BiNode<T>* root) { 63 if (root == NULL) 64 return; 65 PostOrder(root->lchild);//后序遍历二叉树(左,右,根) 66 PostOrder(root->rchild); 67 cout << root->data << " "; 68 } 69 70 template<class T> 71 void BiTree<T>::LeverOrder(BiNode<T>* root) { 72 BiNode<T> *p; 73 if (root == NULL) 74 return; 75 queue<BiNode<T>*> q;//include<queue>库,queue类型为BiNode<T>*,函数push,empty,pop,front 76 q.push(root); 77 while (!q.empty()) { 78 p = q.front(); 79 cout << p->data << " "; 80 q.pop(); 81 if (p->lchild != NULL) { 82 q.push(p->lchild); 83 } 84 if (p->rchild != NULL) { 85 q.push(p->rchild); 86 } 87 } 88 } 89 90 template<class T> 91 BiNode<T>* BiTree<T>::Great() { 92 BiNode<T>* root; 93 T ch; 94 cout << "请输入创建的一颗二叉树的结点数据:" << endl; 95 cin >> ch; 96 if (ch == "#") 97 root = NULL; 98 else { 99 root = new BiNode<T>; 100 root->data = ch; 101 root->lchild = Great(); 102 root->rchild = Great(); 103 } 104 return root; 105 } 106 107 template<class T> 108 void BiTree<T>::ReLease(BiNode<T>* root) { 109 if (root != NULL) { 110 ReLease(root->lchild); 111 ReLease(root->rchild); 112 delete root; 113 } 114 } 115 116 117 int main() 118 { 119 BiTree<string> bt;//创建一棵树 120 BiNode<string>* root = bt.Getroot(); 121 122 cout << "------前序遍历------" << endl; 123 bt.PreOrder(root); 124 cout << endl; 125 cout << "------后序遍历------" << endl; 126 bt.PostOrder(root); 127 cout << endl; 128 cout << "------中序遍历------" << endl; 129 bt.InOrder(root); 130 cout << endl; 131 cout << "------层序遍历------" << endl; 132 bt.LeverOrder(root); 133 cout << endl; 134 135 system("pause"); 136 return 0; 137 }
标签:键盘输入 turn queue ase 函数调用 释放 div 二叉链表 open
原文地址:https://www.cnblogs.com/guoyujiang/p/11880137.html