力扣(LeetCode)226. 翻转二叉树

力扣(LeetCode)226. 翻转二叉树
思路:
从首节点开始,如果首节点为空则直接返回,否则交换左右子树,然后递归下一层
PS:本来用swap函数就可以解决,不过我还是自己写个Swap,权当练习指针操作,可以使用指针的指针,也可以对取指针的地址,然后再用指针进行交换(对指针操作比较迷的话,就直接用swap函数,干净利落)

#include<iostream>
#include<cstdlib>
using namespace std;

typedef struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
} TreeNode,*SearchTree,*Position;

void PreOrderTraversal(SearchTree T)
{
    if(T==NULL)
        return;
    cout<<T->val<<" ";
    PreOrderTraversal(T->left);
    PreOrderTraversal(T->right);
}

SearchTree Insert(int val,SearchTree T)
{
    if(T==NULL)
    {
        T = (SearchTree)malloc(sizeof(TreeNode));
        if(T==NULL)
        {
            cout<<"MALLOC ERROR\n"<<endl;
            exit(1);
        }
        T->val = val;
        T->left = T->right = NULL;
    }
    else
    {
        if(val>T->val)
            T->right = Insert(val,T->right);
        else if(val<T->val)
            T->left = Insert(val,T->left);
    }
    return T;
}

class Solution
{
public:
    void Swap(TreeNode **A,TreeNode **B)
    {
        TreeNode *temp = *A;
        *A = *B;
        *B = temp;
    }
    TreeNode* invertTree(TreeNode* root)
    {
        if(root==NULL)
            return NULL;
        Swap(&root->left,&root->right);
//        swap(root->left,root->right);
        root->left = invertTree(root->left);
        root->right = invertTree(root->right);

        return root;
    }
};

//class Solution
//{
//public:
//    void Swap(TreeNode *&A,TreeNode *&B)
//    {
//        TreeNode *temp = A;
//        A = B;
//        B = temp;
//    }
//    TreeNode* invertTree(TreeNode* root)
//    {
//        if(root==NULL)
//            return NULL;
//        Swap(root->left,root->right);
////        swap(root->left,root->right);
//        root->left = invertTree(root->left);
//        root->right = invertTree(root->right);
//
//        return root;
//    }
//};

int main()
{

    Solution s;
    SearchTree T1 = NULL;
    SearchTree T2 = NULL;

    T1 = Insert(4,T1);
    T1 = Insert(2,T1);
    T1 = Insert(7,T1);
    T1 = Insert(1,T1);
    T1 = Insert(3,T1);
    T1 = Insert(6,T1);
    T1 = Insert(9,T1);



    PreOrderTraversal(T1);
    cout<<endl;

    T2 = s.invertTree(T1);
    PreOrderTraversal(T2);

    return 0;
}