数据结构&算法&人工智能

剑指offer编程题—二叉树的镜像

2020-03-02  本文已影响0人  零岁的我

题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:

二叉树的镜像定义:
源二叉树 
            8
           /  \
          6   10
         / \  / \
        5  7 9 11
镜像二叉树
            8
           /  \
          10   6
         / \  / \
        11 9 7  5

题解思路:
一、递归实现

  1. 递归出口:节点为空
  2. 交换左右子树节点
  3. 递归求左右子树的镜像
/*
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==NULL){
            return ;
        }
        TreeNode *tmp;
        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==NULL)
            return ;
        stack<TreeNode*> st;
        st.push(pRoot);
        TreeNode *tmp;
        while(!st.empty()){
            TreeNode *p=st.top();
            st.pop();
            if(p->left!=NULL || p->right!=NULL){
                tmp=p->left;
                p->left=p->right;
                p->right=tmp;
            }
            if(p->left)
                st.push(p->left);
            if(p->right)
                st.push(p->right);
        }
    }
};
上一篇 下一篇

猜你喜欢

热点阅读