二叉树镜像,递归和循环实现
来源:互联网 发布:网络歌手柔情的原名 编辑:程序博客网 时间:2024/06/03 12:29
/*****************递归交换左右子女*******************/ void exchangeChild(BiTreeNode* &T) { if(T==NULL)return; BiTreeNode *temp = NULL; cout << T->data << " "; if(T->lchild||T->rchild) { temp = T->lchild; T->lchild = T->rchild; T->rchild = temp; exchangeChild(T->lchild); exchangeChild(T->rchild); } return; }
http://zhuyanfeng.com/archives/3170
循环
由于递归的本质是编译器生成了一个函数调用的栈,因此用循环来完成同样任务时,最简单的办法就是用一个辅助栈来模拟递归。首先把树的头结点放入栈中。在循环中,只要栈不为空,弹出栈的栈顶结点,交换它的左右子树。如果它有左子树,把它的左子树压入栈中;如果它有右子树,把它的右子树压入栈中。这样在下次循环中就能交换它儿子结点的左右子树了。参考代码如下:void MirrorIteratively(BinaryTreeNode* pRoot){ if (pRoot == NULL) return; std::stack<BinaryTreeNode*> stackTreeNode; stackTreeNode.push(pRoot); while (stackTreeNode.size() > 0) { BinaryTreeNode *pNode = stackTreeNode.top(); stackTreeNode.pop(); BinaryTreeNode *pTemp = pNode->m_pLeft; pNode->m_pLeft = pNode->m_pRight; pNode->m_pRight = pTemp; if (pNode->m_pLeft) stackTreeNode.push(pNode->m_pLeft); if (pNode->m_pRight) stackTreeNode.push(pNode->m_pRight); }}整理自《剑指Offer》
0 0
- 二叉树镜像,递归和循环实现
- 二叉树三种遍历方式的递归和循环实现
- 二叉树镜像使用递归法和循环法
- 二叉树的递归遍历和非递归(循环)遍历实现
- 二叉树的三种遍历方式的循环和递归的实现方式
- 二分查找 递归实现 和 循环实现
- 二叉树后续遍历的非递归循环C# 实现
- C++二叉树遍历递归与栈循环的实现
- 二叉树的反转,递归实现和非递归实现。
- n的阶乘,循环和递归实现
- 二分搜索的递归和循环实现
- 单链表逆序:通过递归和循环实现。
- PHPfor循环和递归实现九九乘法表
- C:单链表的循环和递归实现
- 求二叉树镜像(破坏二叉树和不破坏二叉树使用非递归实现求解二叉树镜像)
- 二叉树的定义和递归实现
- 二叉树的实现和递归遍历
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 怎样练好普通话
- Intent 传值和 Bundle传值的区别
- 在ib中为button 增加的action相应UIControlEventTouchUpInside 事件
- linux input子系统
- Sql Server 2008完全卸载方法(其他版本类似)
- 二叉树镜像,递归和循环实现
- 关于浅拷贝和深拷贝的简单应用测试
- 单例模式
- 剑指Offer3 二维数据中的查找
- linux 下gtest 安装
- poj2388 快速排序 模板题
- LeetCode_Rotate List
- Cocos2d-x中的强制类型转换
- 你这磨人的小妖精