[剑指Offer] 18.二叉树的镜像
来源:互联网 发布:以色列人工智能武器 编辑:程序博客网 时间:2024/06/06 00:14
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
【思路1】递归,左右孩子交换再分别递归左右子树
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/10 class Solution {11 public:12 void Mirror(TreeNode *pRoot) {13 if(pRoot == NULL) 14 return ;15 TreeNode *temp = pRoot->left;16 pRoot->left = pRoot->right;17 pRoot->right = temp;18 Mirror(pRoot->left);19 Mirror(pRoot->right);20 }21 };
【思路2】非递归,栈实现
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/10 class Solution {11 public:12 void Mirror(TreeNode *pRoot) {13 if(pRoot == NULL) 14 return ;15 stack<TreeNode*> StackNode;16 StackNode.push(pRoot);17 while(!StackNode.empty()){18 TreeNode* tree = StackNode.top();19 StackNode.pop();20 if(tree->left || tree->right){21 TreeNode* temp = tree->left;22 tree->left = tree->right;23 tree->right = temp;24 }25 if(tree->left)26 StackNode.push(tree->left);27 if(tree->right)28 StackNode.push(tree->right);29 }30 }31 };
阅读全文
0 0
- 【剑指offer】二叉树的镜像
- [剑指Offer]二叉树的镜像
- 剑指offer--二叉树的镜像
- 剑指Offer-二叉树的镜像
- 《剑指offer》二叉树的镜像
- 剑指 offer:二叉树的镜像
- 【剑指offer】二叉树的镜像
- 剑指offer 二叉树的镜像
- [剑指offer]二叉树的镜像
- 《剑指offer》-二叉树的镜像
- 剑指Offer:二叉树的镜像
- 剑指offer|二叉树的镜像
- 《剑指offer》二叉树的镜像
- 剑指Offer:二叉树的镜像
- 【剑指offer】二叉树的镜像
- 剑指Offer:二叉树的镜像
- 剑指offer-二叉树的镜像
- 剑指offer 二叉树的镜像
- [剑指Offer] 14.链表中倒数第k个结点
- [剑指Offer] 15.反转链表
- 简单总结一下Java和javascript 中对于 josn对象、字符串的处理。
- [剑指Offer] 16.合并两个排序链表
- [剑指Offer] 17.树的子结构
- [剑指Offer] 18.二叉树的镜像
- [算法] 二维数组(长宽相等)逆时针旋转90°算法
- [剑指Offer] 19.顺时针打印矩阵
- [剑指Offer] 20.包含min函数的栈
- [剑指Offer] 21.栈的压入、弹出序列
- [剑指Offer] 22.从上往下打印二叉树
- [BinaryTree] 二叉搜索树(二叉查找树、二叉排序树)
- C++学习之路(21)---复合类型
- [剑指Offer] 23.二叉搜索树的后序遍历