智能指针的用法以及根据前序遍历生成树
来源:互联网 发布:java实现runnable接口 编辑:程序博客网 时间:2024/06/05 20:14
题目:EPI
提示:
该二叉树储存的数据类型是string,输入的前序遍历数组中,若为 “null”,则表示该节点为空指针,否则表示该节点的储存数据。
template<typename T>class BinaryTree{public:T val;shared_ptr<BinaryTree<T>> left, right;BinaryTree(T d, shared_ptr<BinaryTree<T>> l, shared_ptr<BinaryTree<T>> r) :val(d), left(l), right(r){}BinaryTree(T d) :val(d), left(nullptr), right(nullptr){}BinaryTree(){}};typedef shared_ptr<BinaryTree<string>> treeptr;treeptr reconstruct_preorder(const string* qianxu, int len){treeptr root(nullptr);if (qianxu == nullptr || len < 3 || qianxu[0] == "null")return root;stack<treeptr> s;for (int i = len - 1; i >= 0; i--){if (qianxu[i] == "null"){treeptr p(nullptr);s.push(p);}else{treeptr l = s.top();s.pop();treeptr r = s.top();s.pop();treeptr p(new BinaryTree<string>(qianxu[i],l,r));s.push(p);}}return s.top();}//测试代码string s[] = { "B", "C", "D", "null", "null", "E", "null", "null", "F", "null", "G", "H", "null", "null", "null" };treeptr r = reconstruct_preorder(s, 15);cout << r.get()->val << " " << r.get()->left->val << " " << r.get()->right->val<<endl;
若输入的数组是后序遍历,则把数组从左到右遍历,遇到null则入栈,遇到数据,则从栈里弹出两个数(第一个弹出的是右孩子),生成新的节点后压入栈,最后栈剩下的是根节点。若输入的数组是中序遍历,则无法唯一确定二叉数!
智能指针的用法:
头文件:#include <memory>
定义:std::tr1::shared_ptr<int> ptr(new int);
获取原始数据:(*ptr) = 87;//若是自定义类型如二叉树,也可以使用 ptr->left 的方式为其左子树赋值
*(ptr.get())=87;//用 ptr.get() 这种方式获取原始指针比较保险
0 0
- 智能指针的用法以及根据前序遍历生成树
- 为什么只给出前序以及后序遍历,不能生成唯一的二叉树
- 根据树的前序遍历和中序遍历构造树,输出后序遍历
- 根据前序遍历和中序遍历构建二叉树以及根据中序遍历后序遍历构建二叉树
- 根据二叉树的前序遍历和中序遍历的结果,重建二叉树
- 根据前序遍历,中序遍历构建二叉树
- 根据前序遍历、中序遍历重建二叉树
- 根据前序遍历中序遍历求二叉树
- 树-根据前序、中序遍历求后续遍历
- 根据前序遍历和后续遍历建立二叉树
- 智能指针的用法
- 智能指针的用法
- 智能指针的用法
- 【二叉树】根据二叉树的中序遍历和前序遍历,还原二叉树
- 根据二叉树的前序遍历和中序遍历,重构出二叉树
- 根据二叉树的前序遍历和中序遍历重建二叉树
- 根据树的前序遍历与中序遍历构建二叉树
- 根据二叉树的前序遍历和中序遍历,重构二叉树
- 程序员到项目经理:从内而外的提升(比较全面的介绍)
- 调用scrollViewDidScroll,点击返回键崩溃
- javascript高级程序设计 5.5.3作为值得函数
- 冒泡排序委托
- JS复制到剪贴板兼容FF
- 智能指针的用法以及根据前序遍历生成树
- 工具——使用SVN进行项目版本管理
- 你用过栅格系统吗?如果使用过,你最喜欢哪种?
- Jboss配置远程调试
- 路由器专业术语
- ios算法总结(非完整版)
- Web Server 架构浅谈-Simple Multiple Threaded Achitecture
- API--2
- [Ext.Net 1.X]TreePanel的各项属性