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 }
  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3053282.html
Copyright © 2011-2022 走看看