zoukankan      html  css  js  c++  java
  • 将二分查找书转变成其镜像

    题目:输入一颗二元查找树,将该树转换为它的镜像,
    即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
    用递归和循环两种方法完成树的镜像转换。
    例如输入:
    8
    / \
    6 10
    /\ /\
    5 7 9 11
    输出:
    8
    / \
    10 6
    /\ /\
    11 9 7 5

    二分查找树的节点数据结构为:

    1 struct BinaryTreeNode
    2 {
    3     int nData;
    4 
    5     BinaryTreeNode *lChild;
    6     BinaryTreeNode *rChild;
    7 };

    思路:很简单,每次交换根节点的左右子树直到也节点即可,直接上代码.

    递归方法:

     1 void ChangeToMirror_Recursive(BinaryTreeNode *root)
     2 {
     3     if (NULL == root)
     4     {
     5         return;
     6     }
     7 
     8     // 交换当前根节点的左右子树
     9     BinaryTreeNode *pTemp = root->lChild;
    10     root->lChild = root->rChild;
    11     root->rChild = pTemp;
    12 
    13     // 递归左子树
    14     ChangeToMirror_Recursive (root->lChild);
    15 
    16     // 递归右子树
    17     ChangeToMirror_Recursive (root->rChild);
    18 }

    非递归方法:

     1 void ChangeToMirror(BinaryTreeNode *root)
     2 {
     3     assert (root != NULL);
     4 
     5     BinaryTreeNode *Stack[MAX];
     6     int nTop = -1;
     7 
     8     Stack[++nTop] = root;
     9     while (nTop >= 0)
    10     {
    11         // 首先取出栈顶的节点,交换其左右子树
    12         BinaryTreeNode *pTemp1 = Stack[nTop--];
    13         
    14         BinaryTreeNode *pTemp2 = pTemp1->lChild;
    15         pTemp1->lChild = pTemp1->rChild;
    16         pTemp1->rChild = pTemp2;
    17 
    18         if (pTemp1->lChild != NULL)
    19         {
    20             // 左子树不为空需要处理
    21             Stack[++nTop] = pTemp1->lChild;
    22         }
    23 
    24         if (pTemp1->rChild != NULL)
    25         {
    26             // 右子树不为空需要处理
    27             Stack[++nTop] = pTemp1->rChild;
    28         }
    29     }
    30 }
  • 相关阅读:
    配置ASP.NET 2.0环境
    httpwatch
    自定义分页控件
    clear在CSS中的妙用
    Maximum length exceeded错误
    SQLServer数据表分区优化数据库
    游标的使用
    在Sql Server 使用系统存储过程sp_rename修改表名或列名
    SQL Server中如何备份到异机
    SQL Server 中 自定义函数 和 游标 应用的经典案例
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3053282.html
Copyright © 2011-2022 走看看