zoukankan      html  css  js  c++  java
  • 剑指offer——面试题27:二叉树的镜像

    函数递归
     1 void MirrorIteratively(BinaryTreeNode* pRoot)
     2 {
     3     if(pRoot == nullptr)
     4         return;
     5 
     6     std::stack<BinaryTreeNode*> stackTreeNode;
     7     stackTreeNode.push(pRoot);
     8 
     9     while(stackTreeNode.size() > 0)
    10     {
    11         BinaryTreeNode *pNode = stackTreeNode.top();
    12         stackTreeNode.pop();
    13 
    14         BinaryTreeNode *pTemp = pNode->m_pLeft;
    15         pNode->m_pLeft = pNode->m_pRight;
    16         pNode->m_pRight = pTemp;
    17 
    18         if(pNode->m_pLeft)
    19             stackTreeNode.push(pNode->m_pLeft);
    20 
    21         if(pNode->m_pRight)
    22             stackTreeNode.push(pNode->m_pRight);
    23     }
    24 }
    函数循环
      1 #include"BinaryTree.h"
      2 
      3 // ====================测试代码====================
      4 // 测试完全二叉树:除了叶子节点,其他节点都有两个子节点
      5 //            8
      6 //        6      10
      7 //       5 7    9  11
      8 void Test1()
      9 {
     10     printf("=====Test1 starts:=====
    ");
     11     BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8);
     12     BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6);
     13     BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10);
     14     BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);
     15     BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7);
     16     BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9);
     17     BinaryTreeNode* pNode11 = CreateBinaryTreeNode(11);
     18 
     19     ConnectTreeNodes(pNode8, pNode6, pNode10);
     20     ConnectTreeNodes(pNode6, pNode5, pNode7);
     21     ConnectTreeNodes(pNode10, pNode9, pNode11);
     22 
     23     PrintTree(pNode8);
     24 
     25     printf("=====Test1: MirrorRecursively=====
    ");
     26     MirrorRecursively(pNode8);
     27     PrintTree(pNode8);
     28 
     29     printf("=====Test1: MirrorIteratively=====
    ");
     30     MirrorIteratively(pNode8);
     31     PrintTree(pNode8);
     32 
     33     DestroyTree(pNode8);
     34 }
     35 
     36 // 测试二叉树:出叶子结点之外,左右的结点都有且只有一个左子结点
     37 //            8
     38 //          7
     39 //        6
     40 //      5
     41 //    4
     42 void Test2()
     43 {
     44     printf("=====Test2 starts:=====
    ");
     45     BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8);
     46     BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7);
     47     BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6);
     48     BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);
     49     BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);
     50 
     51     ConnectTreeNodes(pNode8, pNode7, nullptr);
     52     ConnectTreeNodes(pNode7, pNode6, nullptr);
     53     ConnectTreeNodes(pNode6, pNode5, nullptr);
     54     ConnectTreeNodes(pNode5, pNode4, nullptr);
     55 
     56     PrintTree(pNode8);
     57 
     58     printf("=====Test2: MirrorRecursively=====
    ");
     59     MirrorRecursively(pNode8);
     60     PrintTree(pNode8);
     61 
     62     printf("=====Test2: MirrorIteratively=====
    ");
     63     MirrorIteratively(pNode8);
     64     PrintTree(pNode8);
     65 
     66     DestroyTree(pNode8);
     67 }
     68 
     69 // 测试二叉树:出叶子结点之外,左右的结点都有且只有一个右子结点
     70 //            8
     71 //             7
     72 //              6
     73 //               5
     74 //                4
     75 void Test3()
     76 {
     77     printf("=====Test3 starts:=====
    ");
     78     BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8);
     79     BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7);
     80     BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6);
     81     BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);
     82     BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);
     83 
     84     ConnectTreeNodes(pNode8, nullptr, pNode7);
     85     ConnectTreeNodes(pNode7, nullptr, pNode6);
     86     ConnectTreeNodes(pNode6, nullptr, pNode5);
     87     ConnectTreeNodes(pNode5, nullptr, pNode4);
     88 
     89     PrintTree(pNode8);
     90 
     91     printf("=====Test3: MirrorRecursively=====
    ");
     92     MirrorRecursively(pNode8);
     93     PrintTree(pNode8);
     94 
     95     printf("=====Test3: MirrorIteratively=====
    ");
     96     MirrorIteratively(pNode8);
     97     PrintTree(pNode8);
     98 
     99     DestroyTree(pNode8);
    100 }
    101 
    102 // 测试空二叉树:根结点为空指针
    103 void Test4()
    104 {
    105     printf("=====Test4 starts:=====
    ");
    106     BinaryTreeNode* pNode = nullptr;
    107 
    108     PrintTree(pNode);
    109 
    110     printf("=====Test4: MirrorRecursively=====
    ");
    111     MirrorRecursively(pNode);
    112     PrintTree(pNode);
    113 
    114     printf("=====Test4: MirrorIteratively=====
    ");
    115     MirrorIteratively(pNode);
    116     PrintTree(pNode);
    117 }
    118 
    119 // 测试只有一个结点的二叉树
    120 void Test5()
    121 {
    122     printf("=====Test5 starts:=====
    ");
    123     BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8);
    124 
    125     PrintTree(pNode8);
    126 
    127     printf("=====Test4: MirrorRecursively=====
    ");
    128     MirrorRecursively(pNode8);
    129     PrintTree(pNode8);
    130 
    131     printf("=====Test4: MirrorIteratively=====
    ");
    132     MirrorIteratively(pNode8);
    133     PrintTree(pNode8);
    134 }
    135 
    136 int main(int argc, char* argv[])
    137 {
    138     Test1();
    139     Test2();
    140     Test3();
    141     Test4();
    142     Test5();
    143 
    144     return 0;
    145 }
    测试代码
  • 相关阅读:
    Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏
    Oracle学习笔记:外连接(+)的用法
    Oracle学习笔记:with as子查询用法
    Oracle学习笔记:a inner join b与from a,b where a.x=b.x的差异
    oracle查看表,索引,视图,存储过程的定义
    oracle查看监听状态
    由sock引起的感想
    xargs
    oracle知识点小结1
    Oracle系统权限列表
  • 原文地址:https://www.cnblogs.com/acm-jing/p/10426271.html
Copyright © 2011-2022 走看看