二叉树叶子节点迭代器
来源:互联网 发布:中文域名注册查询 编辑:程序博客网 时间:2024/06/08 13:54
开始的想法是先将叶子节点放入到一个vector中,然后依次next
下面的解法类似,但是只有在Next操作时才寻找下一个叶子节点
template <typename T>class Iterator{ public: Iterator(T *root) { if(root == NULL) return; st.push(root); probe(); } bool hasNext() { return (st.size() > 0); } T *next() { T *node = st.top(); st.pop(); if(!st.empty()) probe(); return node; } private: stack<T *> st; bool leaf(T *node) { return (node->leftChild() == NULL && node->rightChild() == NULL); } void probe() { T *now = st.top(); while(!leaf(now)) { st.pop(); if(now->rightChild()) st.push(now->rightChild()); if(now->leftChild()) st.push(now->leftChild()); now = st.top(); } }};
不用空间的方法是,记录上一次迭代到的叶子节点curr, 下一个叶子节点必须是经过curr的下一个叶子节点
struct NODE { int nVal; NODE* pLft; NODE* pRgt; NODE(int n) : nVal(n), pLft(NULL), pRgt(NULL) {}};void _inner_get_next(NODE* pNode, NODE* pIter, bool& bFlag, NODE*& pNext){ if (NULL == pNode) return; _inner_get_next(pNode->pLft, pIter, bFlag, pNext); if (NULL != pNext) return; if (bFlag && NULL == pNode->pLft && NULL == pNode->pRgt) { pNext = pNode; return; } if (pIter == pNode) bFlag = true; _inner_get_next(pNode->pRgt, pIter, bFlag, pNext);}NODE* GetNext(NODE* pRoot, NODE* pIter){ if (NULL == pRoot || NULL == pIter) return NULL; NODE* pNext = NULL; bool bFlag = false; _inner_get_next(pRoot, pIter, bFlag, pNext); return pNext;}
- 二叉树叶子节点迭代器
- 二叉树叶子节点数
- 剪掉二叉树叶子节点
- 二叉树叶子节点个数的计算
- 完全二叉树叶子节点的个数
- 统计二叉树叶子节点的个数
- 求二叉树叶子节点的个数
- 求二叉树叶子节点数
- 输出二叉树叶子节点数目
- 计算二叉树叶子节点的数目
- 二叉树叶子节点及深度
- 求二叉树叶子节点的个数
- 完全二叉树叶子节点的个数
- 二叉树叶节点和
- 求二叉树叶子节点的最浅深度
- 笔试题:求二叉树叶子节点的个数
- 二叉树叶子数
- 二叉树叶子数
- ADO.net中DataTable 临时表的简单使用
- 在SpringSide 3 中使用多个数据库的方法
- listview 相关
- Ogre 3DMax导出插件oFusion
- C++ static ,extern以及全局变量之间的相关逻辑
- 二叉树叶子节点迭代器
- 调整android系统中的init.rc
- 正则表达式验证电话和邮箱格式示例
- 程序员的学习与积累
- Visual Studio中的正则替换
- 二叉树完整实现C++
- 有关cookie总是无法立即清除的原因
- 类加载机制
- IO系统性能之一:衡量性能的几个指标