C++实现二叉树的镜像操作(18)---《那些奇怪的算法》
2017-10-29 23:26
736 查看
我们需要实现二叉树的镜像操作,问题描述如下:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
二叉树节点
栈结构
堆结构实现(注意堆得front结构)
参考别人的递归实现,如下:
参考:二叉树的镜像
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
二叉树节点
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };
栈结构
class Solution { public: void Mirror(TreeNode *pRoot) { if(!pRoot) return; stack<TreeNode*> sta; sta.push(pRoot); while(!sta.empty()){ TreeNode* cur=sta.top(); sta.pop(); if(cur->left||cur->right){ TreeNode* tmp=cur->left; cur->left=cur->right; cur->right=tmp; } if(cur->left) sta.push(cur->left); if(cur->right) sta.push(cur->right); } } };
堆结构实现(注意堆得front结构)
class Solution { public: void Mirror(TreeNode *pRoot) { if(!pRoot) return; queue<TreeNode*> que; que.push(pRoot); while(!que.empty()){ TreeNode* cur=que.front(); que.pop(); if(cur->left||cur->right){ TreeNode* tmp=cur->left; cur->left=cur->right; cur->right=tmp; } if(cur->left) que.push(cur->left); if(cur->right) que.push(cur->right); } } };
参考别人的递归实现,如下:
class Solution { public: void Mirror(TreeNode *pRoot) { if(pRoot){ TreeNode *tmp = pRoot->left; pRoot->left = pRoot->right; pRoot->right = tmp; Mirror(pRoot->left); Mirror(pRoot->right); } return ; } };
参考:二叉树的镜像
相关文章推荐
- C++之求解二叉树中所有从根节点到叶节点的所有路径(23)---《那些奇怪的算法》
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- (二叉树)谈一谈各类算法和数据结构的c++实现以及相关操作的复杂度(二)
- C++之实现两个链表合并(迭代和递归版本)(19)---《那些奇怪的算法》
- C++之实现大顶堆(1)---《那些奇怪的算法》
- C++实现两个有序链表合并(17)---《那些奇怪的算法》
- C++之堆的实现(5)---《那些奇怪的算法》
- C++实现二叉树,运用模板,界面友好,操作方便 运行流畅
- 二叉树的基本操作的c++实现
- 二叉树的先序、中序、后序遍历等基本操作c++实现
- 二叉树的实现及相关操作C/C++
- C++实现二叉树相关操作
- 检查一个二叉树是否平衡的算法分析与C++实现
- 使用C++链表来实现二叉树的存储和基本操作
- 【代码】C++实现二叉树基本操作及测试用例
- 【数据结构与算法】二叉树给定两个节点的最短距离(C++实现)
- 算法与数据结构面试题(18)-二叉树镜像
- c++学习笔记—二叉树基本操作的实现
- 数据结构与算法——表达式树类的C++实现(二叉树)