C++实现二叉树的镜像操作(18)---《那些奇怪的算法》
来源:互联网 发布:找工作软件软件排行榜 编辑:程序博客网 时间:2024/06/06 05:50
我们需要实现二叉树的镜像操作,问题描述如下:
二叉树的镜像定义:源二叉树
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 ; }};
参考:二叉树的镜像
阅读全文
0 0
- C++实现二叉树的镜像操作(18)---《那些奇怪的算法》
- C++之二叉排序树(二叉搜索树)的实现(4)---《那些奇怪的算法》
- C++之平衡二叉树的判定(25)---《那些奇怪的算法》
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- C++之实现大顶堆(1)---《那些奇怪的算法》
- C++之统计二叉树中路径和为定值的所有路径(24)---《那些奇怪的算法》
- 算法题目-二叉树的镜像
- 算法复习:二叉树的镜像
- 算法题目---二叉树的镜像
- 算法复习:二叉树的镜像
- 算法题/二叉树的镜像
- 算法学习记录十四(C++)--->二叉树的镜像
- 对称的二叉树(二叉树的镜像操作)
- 笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)
- 面试算法(十八)二叉树的镜像
- 二叉树的镜像java实现
- 剑指offer题解C++【18】二叉树的镜像
- C++之排序算法(2)---《那些奇怪的算法》
- 动态获取滚动条位置,距离页面顶部距离scrollTop,两种方法任你选,封装完毕,拿去不谢!!!
- 小谈H5 web本地数据存储
- centos svn 迁移
- Collection 集合
- 函数调用堆栈
- C++实现二叉树的镜像操作(18)---《那些奇怪的算法》
- 【安全牛学习笔记】主动探测
- leetcode007-3Sum Closest
- STL_map用法
- 设计模式之单例模式(线程安全)
- 发明专利申请过程及案例下载
- JavaSwing_5.1: 组件的位置和尺寸
- Hibernate 缓存机制
- 总结积累