#include "stdafx.h" #include <iostream> using namespace std; struct Tnode { char data; Tnode * lchild, *rchild; }; class Etree { public: Etree() { root = Creat(root); } ~Etree() { Release(root); } void Preorder() { Preorder(root); } void Inorder() { Inorder(root); } void Postorder() { Postorder(root); } void find() { void findnode(Tnode * bt); } private: Tnode * root; Tnode * Creat(Tnode *bt); void Release(Tnode *bt); void Preorder(Tnode *bt); void Inorder(Tnode * bt); void Postorder(Tnode * bt); void findnode(Tnode * bt); }; Tnode * Etree::Creat(Tnode * bt) { char ch; cout << "请输入创建一棵二叉树的结点数据:" << endl; cin >> ch; if (ch == '#') return NULL; else { bt = new Tnode; bt->data = ch; bt->lchild = Creat(bt->lchild); bt->rchild = Creat(bt->rchild); } return bt; } void Etree::Release(Tnode * bt) { if (bt != NULL) { Release(bt->lchild); Release(bt->rchild); delete bt; } } void Etree::Preorder(Tnode * bt) { if (bt == NULL) return; else { cout << bt->data << " "; Preorder(bt->lchild); Preorder(bt->rchild); } } void Etree::Inorder(Tnode * bt) { if (bt == NULL) return; else { Inorder(bt->lchild); cout << bt->data << " "; Inorder(bt->rchild); } } void Etree::Postorder(Tnode * bt) { if (bt == NULL) return; else { Postorder(bt->lchild); Postorder(bt->rchild); cout << bt->data << " "; } } void Etree::findnode(Tnode * bt) { char zhi; cout << "请输出要查看的节点的值" << endl; cin >> zhi; if (zhi == '#') return; else { while (bt != NULL) { Preorder(bt->lchild); Preorder(bt->rchild); if (bt->data == zhi) { { if (bt->lchild == NULL) cout << "该节点无左节点。" << endl; else cout << "该节点的左节点的值为:" << (bt->lchild)->data << endl; } { if (bt->rchild == NULL) cout << "该节点无右节点。" << endl; else cout << "该节点的右节点的值为:" << (bt->rchild)->data << endl; } } } } } int main() { Etree T; cout << "前序遍历:" << endl; T.Preorder(); cout << endl; cout << "中序遍历:" << endl; T.Inorder(); cout << endl; cout << "后序遍历:" << endl; T.Postorder(); cout << endl; T.find(); return 0; }
实验5:二叉树的链式储存
猜你喜欢
转载自blog.csdn.net/u011633428/article/details/80425686
今日推荐
周排行