[剑指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 };

 

原创粉丝点击