二叉树(11)----求二叉树的镜像,递归和非递归方式
来源:互联网 发布:淘宝禁售兴奋剂有哪些 编辑:程序博客网 时间:2024/06/05 15:49
1、二叉树定义:
typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight;} BTreeNode_t;
2、求二叉树镜像
例如:
A A
B C ====> C B
D E E D
(1)递归方式
如果pRoot为NULL,则为空树,返回;
如果pRoot不为NULL,交换pRoot左右结点,然后分别求左右子树的镜像;
void BTreeMirror( BTreeNode_t *pRoot){ if( pRoot == NULL ) return ; BTreeNode_t *pTemp = pRoot->m_pLeft; pRoot->m_pLeft = pRoot->m_pRight; pRoot->m_pLeft = pTemp; BTreeMirror( pRoot->m_pLeft); BTreeMirror( pRoot->m_pRight); return;}
(2)非递归方式
步骤描述:借助队列
首先,将根节点pRoot入队;
第一步:当队列未空时,获取当前层次的节点总数,即当前队列的长度;执行第二步;
第二步:按照当前层的节点总数,出队进行遍历节点,在遍历时,交换左右节点,如果左右节点存在,则入队;当遍历完当前层所有节点时,遍历下一层,执行第一步。
void BTreeMirror( BTreeNode_t *pRoot){ if( pRoot == NULL ) return NULL; queue <BTreeNode_t *> que; que.push(pRoot); int curLevelNodesTotal = 0; while( !que.empty()){ curLevelNodesTotal = que.size(); int cnt = 0; while( cnt < curLevelNodesTotal ){ ++cnt; pRoot = que.front(); que.pop(); BTreeNode_t *pTemp = pRoot->m_pLeft: pRoot->m_pLeft = pRoot->m_pRight; pRoot->m_pRight = pTemp; if( pRoot->m_pLeft != NULL) que.push( pRoot->m_pLeft); if( pRoot->m_pRight != NULL ) que.push( pRoot->m_pRight); } } return;}
0 0
- 二叉树(11)----求二叉树的镜像,递归和非递归方式
- 二叉树的镜像(递归和非递归)
- 四:二叉树的镜像递归非递归求解
- 二叉树的遍历,递归和非递归,求深度
- 求二叉树深度的递归和非递归算法
- 二叉树的镜像(非递归)
- 二叉树的前中后序遍历,递归和非递归方式
- 二叉树的递归和非递归
- 二叉树的递归和非递归
- 求二叉树的高度(非递归)
- 非递归求二叉树的深度
- 二叉树递归、非递归求深度
- 求二叉树的镜像(破坏二叉树和不破坏二叉树用递归实现求二叉树镜像)
- 【剑指offer】二叉树的镜像(递归+非递归)
- 笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)
- 求二叉树深度 -- 递归和非递归实现
- 二叉树(4)----求二叉树深度,递归和非递归
- 二叉树(7)----求二叉树叶子节点个数,递归和非递归
- 正则与NSPredicate 应用
- HDU2091(预处理+格式控制)
- 用MyEclipse2014自动加载ssh无法连接数据库问题
- ubuntu 13.04 安装 JDK
- AttributeSet 帮助类,读取Android的属性---1
- 二叉树(11)----求二叉树的镜像,递归和非递归方式
- AttributeSet 帮助类,读取Android的属性---2
- oc nil, Nil, NULL和NSNull的区别
- 微软完整的SQLHelper
- 【灌水】天草逆向, esp定律脱壳
- RedHat Enterprise Linux挂载新硬盘
- 我和nupt集训队的故事
- iSCSI技术白皮书
- 关于ISCSI的IQN号