leetcode226(翻转二叉树)--C语言实现

吃可爱长大的小学妹 提交于 2020-08-11 13:49:59

求:

翻转一棵二叉树。

示例:

输入:

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

     4
   /   \
  7     2
 / \   / \
9   6 3   1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

 

解:

思路:从根节点开始,分别交换树中每一个节点的左右节点的指针,递归调用完成后得到的树就是原树的镜像翻转树。分别判断根节点为空、根节点不空但左右节点均为空、根节点不空但左右节点有一个为空、根节点不空但左右节点均不为空的情况下,应该怎么操作指针即可。最后返回根节点的指针。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 
void  Mirror( struct  TreeNode* root){
     if (root==NULL || (root->left==NULL && root->right==NULL))   return ;
     if (root->left==NULL || root->right==NULL){
         if (root->left==NULL){
            root->left = root->right;
            root->right=NULL;
        } else {
            root->right = root->left;
            root->left=NULL;
        }
    }
     if (root->left!=NULL && root->right!=NULL){
         struct   TreeNode * tmp = root->right;
        root->right = root->left;
        root->left = tmp;
    }
    Mirror(root->left);
    Mirror(root->right);
}
 
struct  TreeNode* invertTree( struct  TreeNode* root){
     if (root==NULL)   return  root;
    Mirror(root);
     return  root;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!