• 剑指Offer17 二叉树的镜像


      1 /*************************************************************************
      2     > File Name: 17_MirrorOfBinaryTree.cpp
      3     > Author: Juntaran
      4     > Mail: JuntaranMail@gmail.com
      5     > Created Time: 2016年08月30日 星期二 17时10分03秒
      6  ************************************************************************/
      7 
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 #include <malloc.h>
     11 #include <bits/stdc++.h>
     12 
     13 using namespace std;
     14 
     15 // 二叉树结构体
     16 struct TreeNode
     17 {
     18     int val;
     19     TreeNode* left;
     20     TreeNode* right;
     21 };
     22 
     23 TreeNode* createTree()
     24 {
     25     TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
     26     root->val = 8;
     27     root->left = (TreeNode*)malloc(sizeof(TreeNode));
     28     root->left->val = 8;
     29     root->right = (TreeNode*)malloc(sizeof(TreeNode));
     30     root->right->val = 7;
     31     root->right->left = NULL;
     32     root->right->right = NULL;
     33     root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
     34     root->left->left->val = 9;
     35     root->left->left->left = NULL;
     36     root->left->left->right = NULL;
     37     root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
     38     root->left->right->val = 2;
     39     root->left->right->left = (TreeNode*)malloc(sizeof(TreeNode));
     40     root->left->right->left->val = 4;
     41     root->left->right->left->left = NULL;
     42     root->left->right->left->right = NULL;
     43     root->left->right->right = (TreeNode*)malloc(sizeof(TreeNode));
     44     root->left->right->right->val = 7;
     45     root->left->right->right->left = NULL;
     46     root->left->right->right->right = NULL;
     47     
     48     return root;
     49 }
     50 
     51 void Mirror(TreeNode* root)
     52 {
     53     if (root == NULL)
     54         return;
     55     if (root->left==NULL && root->right==NULL)
     56         return;
     57     
     58     TreeNode* temp = root->left;
     59     root->left = root->right;
     60     root->right = temp;
     61     
     62     if (root->left)
     63         Mirror(root->left);
     64     if (root->right)
     65         Mirror(root->right);
     66 }
     67 
     68 // 层序遍历二叉树
     69 void PrintTreeByLevel(TreeNode* root)
     70 {
     71     if (root == NULL)
     72         return;
     73     
     74     vector<TreeNode*> vec;
     75     vec.push_back(root);
     76     int cur = 0;
     77     int last = 1;
     78     
     79     while (cur < vec.size())
     80     {
     81         last = vec.size();
     82         while (cur < last)
     83         {
     84             printf("%d ", vec[cur]->val);
     85             if (vec[cur]->left != NULL)
     86                 vec.push_back(vec[cur]->left);
     87             if (vec[cur]->right != NULL)
     88                 vec.push_back(vec[cur]->right);
     89             
     90             ++ cur;
     91         }
     92         printf("
    ");
     93     }
     94 }
     95 
     96 int main()
     97 {
     98     TreeNode* tree = createTree();
     99     
    100     PrintTreeByLevel(tree);
    101     printf("
    ");
    102     
    103     Mirror(tree);
    104     PrintTreeByLevel(tree);
    105     
    106     return 0;
    107 }
  • 相关阅读:
    Vulkan
    C# Optimization
    C# Bridge Pattern(Handle/Body)
    Favorite Games
    Unity Particle System Sorting Order
    UGUI
    C# Language Specification
    接口的显式实现和隐式实现
    C#反射机制
    wcf 使用sqlMembership证书认证
  • 原文地址:https://www.cnblogs.com/Juntaran/p/5823162.html
Copyright © 2020-2023  润新知