17 二叉树的镜像
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树 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 == nullptr){ return; } TreeNode *tmp = pRoot -> left; pRoot -> left = pRoot -> right; pRoot -> right = tmp; Mirror(pRoot -> left); Mirror(pRoot -> right); } };
循环版本:
/* 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 == nullptr){ return; } stack<TreeNode*> s; s.push(pRoot); while(s.size() != 0){ TreeNode *ptr = s.top(); s.pop(); TreeNode *tmp = ptr -> left; ptr -> left = ptr -> right; ptr -> right = tmp; if(ptr -> left != nullptr){ s.push(ptr -> left); } if(ptr -> right != nullptr){ s.push(ptr -> right); } } } };