树的遍历,前中后+层次遍历非递归
来源:互联网 发布:域名出售平台哪个好 编辑:程序博客网 时间:2024/06/06 00:22
存在内存泄漏,,,,原因是没有销毁结点时内存释放的处理.
#include<iostream>#include<deque>#include<stack>#include<string>using namespace std;class cbtnode{public: char data; cbtnode * parent; cbtnode * lchild; cbtnode * rchild;};typedef cbtnode btnode;class cbtroot{public: cbtroot(string &s) { settree(s); } void xianxubianli1()//递归形式的先序遍历 { xianxubianli1(root); }private: void xianxubianli1(btnode *node) { if (node == nullptr) return; cout << node->data << " "; xianxubianli1(node->lchild); xianxubianli1(node->rchild); }public:/*非递归形式的遍历,都是通过栈来完成的.比如先序遍历当节点出栈的时候要先将该节点的右孩子入栈然后在入左孩子...*中序遍历的话先不断的将左孩子入栈,当左孩子出栈的时候如果父亲有右孩子,那么就将右孩子的左孩子不断入栈.没有的话就不断出栈知道右孩子不为空..*后序遍历则是在中序的基础上需要了一个标志位,如果该节点的右孩子没有遍历才遍历,遍历过了就直接出栈.*/ void xianxubianli2() { if (root == nullptr) return; stack<btnode*> node_stack; node_stack.push(root); while (!node_stack.empty()) { btnode * outp = node_stack.top(); node_stack.pop(); cout << outp->data; if (outp->rchild != nullptr) node_stack.push(outp->rchild); if (outp->lchild != nullptr) node_stack.push(outp->lchild); } } void zhongxubianli1() { stack<btnode*> node_stack; node_stack.push(root); btnode * outp; while (!node_stack.empty()) { outp = node_stack.top(); while (outp->lchild != nullptr) { node_stack.push(outp->lchild); outp = outp->lchild; } while (!node_stack.empty()) { outp = node_stack.top(); cout << outp->data << " "; node_stack.pop(); if (outp->rchild != nullptr) { node_stack.push(outp->rchild); break; } } } } void houxubianli1() { stack<btnode*> node_stack; node_stack.push(root); btnode * outp; btnode * tag = nullptr;//标志位 while (!node_stack.empty()) { outp = node_stack.top(); while (outp->lchild != nullptr) { node_stack.push(outp->lchild); outp = outp->lchild; } while (!node_stack.empty()) { outp = node_stack.top(); if (outp->rchild != nullptr && tag != outp->rchild) { node_stack.push(outp->rchild); break; } else { cout << outp->data << " "; //当右孩子被遍历过了才进行打印和出栈 node_stack.pop(); tag = outp; } } } } //层次遍历则是一个队列来完成的,很简单不说了. void cengcibianli() { deque<btnode *> node_que; node_que.push_back(root); btnode * outp; while (!node_que.empty()) { outp = node_que.front(); node_que.pop_front(); if (outp->lchild != nullptr) node_que.push_back(outp->lchild); if (outp->rchild != nullptr) node_que.push_back(outp->rchild); cout << outp->data << " "; } }private: btnode * search(char); void settree(string &s); cbtnode * root;};typedef cbtroot btroot;btnode * buynode(char data, btnode*l, btnode *r, btnode * p){ btnode *root = (btnode*)malloc(sizeof(btnode)); root->data = data; root->lchild = l; root->rchild = r; root->parent = p; return root;}btnode * btroot::search(char key){ btnode * tmp = root; btnode * par = nullptr; while (tmp != nullptr && tmp->data != key) { par = tmp; if (tmp->data < key) { tmp = tmp->rchild; } else { tmp = tmp->lchild; } } if (tmp != nullptr) { return nullptr; } return par;}void btroot::settree(string &s) { for (int i = 0; i < s.size(); ++i) { if (root == nullptr) { root = buynode(s[i], nullptr, nullptr, nullptr); } else { btnode * tmp = search(s[i]); if (tmp == nullptr) continue; btnode * insert_node = buynode(s[i], nullptr, nullptr, tmp); if (s[i] < tmp->data) tmp->lchild = insert_node; else tmp->rchild = insert_node; } }}int main(){ string str = { "ebhadgcifk" }; //这是一棵二叉搜索树.... btroot *root = new btroot(str); root->cengcibianli();//层次遍历 return 0;}
0 0
- 树的遍历,前中后+层次遍历非递归
- 二叉树的前序中序后序遍历,非递归遍历 层次遍历
- 二叉树的遍历(递归+非递归+层次遍历)
- 二叉树的非递归层次遍历
- 二叉树的非递归遍历及层次遍历
- 二叉树的非递归遍历以及层次遍历
- 二叉树的非递归遍历,层次遍历
- 树的遍历(先中后序,非递归,层次遍历)
- 二叉树遍历(层次,递归,非递归)
- 二叉树的递归,层次,以及非递归遍历
- 二叉树的各种遍历(递归,非递归,层次)
- 二叉树的遍历(递归,非递归,层次)
- 二叉树的递归、层次与非递归遍历
- 二叉树的遍历(递归,非递归,层次)
- 二叉树的创建、层次遍历、递归遍历、非递归遍历
- 【数据结构】二叉树的定义,递归遍历,非递归遍历,层次遍历,深度等
- 二叉树(前中后序递归非递归遍历,层次遍历
- 非递归按层次遍历二叉树
- SD卡初始化及读写流程
- Linux基本命令(一)
- 关于androidstuio运行程序遇到 Error:(11, 8) 错误: 无法访问HttpEntity 找不到org.apache.http.HttpEntity的类文件解决方法
- 初学者如何学习Vim
- socket编程(1)—— 一对一通信(本地IPC和网络)
- 树的遍历,前中后+层次遍历非递归
- Fresco-加载图片基础[详细图解Fresco的使用]
- centos下安装redis服务
- JVM中的垃圾收集算法和Heap分区简记
- Linux RTC驱动模型分析
- 归并排序
- Centos 7 调整 home分区 扩大 root分区
- spring3和spring4的一些需要注意的地方
- 'Building workspace' has encountered a problem