剑指offer27-树的镜像

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9
输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

思路一:递归

递归返回条件:如果root为空,返回空

交换左右子树
把root的左子树放到mirrorTree中镜像一下
把root的右子树放到mirrorTree中镜像一下

返回根节点root

先交换还是先镜像都可以,对顺序没有要求

TreeNode* mirrorTree(TreeNode* root) {
       if(root == NULL) return NULL;
       swap(root->left,root->right);
       if(root->left) mirrorTree(root->left);
       if(root->right) mirrorTree(root->right);
       return root;
}

思路二:迭代

不难发现,递归求解的本质其实就是前序遍历
因此可以用栈解决

TreeNode* mirrorTree(TreeNode* root) {
      if(root == NULL) return NULL;
      stack<TreeNode*> stk;
      stk.push(root);
      while(!stk.empty()) {
          TreeNode* node = stk.top();
          stk.pop();
          swap(node->left,node->right);
          if(node->right) stk.push(node->right);
          if(node->left) stk.push(node->left);
      }
      return root;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值