zoukankan      html  css  js  c++  java
  • 求二元查找树的镜像

    题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。

    例如输入:

         8
        /  
      6      10
     /       /
    5  7    9   11

    输出:

          8
        /  
      10    6
     /      /
    11  9  7  5

    定义二元查找树的结点为:

    struct BSTreeNode // a node in the binary search tree (BST)
    {
          int          m_nValue; // value of node
          BSTreeNode  *m_pLeft;  // left child of node
          BSTreeNode  *m_pRight; // right child of node
    };

    解题:

    1.递归
    void transform(BSTreeNode *tree)
    {
        if(!tree)
            return ;
    
        BSTreeNode* temp;
        temp = tree->left;
        tree->left = tree->right;
        tree->right = temp;
    
        transform(tree->left);
        transform(tree->right);
    }
    2.循环
    /****循环(前序)****/
    void transform(BSTreeNode *tree)
    {
        BSTreeNode* p = tree;
        Stack<BTNode*> S;
        while( p || !empty(S))
        {
            if(p)
            {            
    
                BSTreeNode* temp;
                temp = p->left;
                p->left = p->right;
                p->right = temp;
                
                push(p);
    
                p = p->left;
            }
            else
            {
                p = pop(S);
    
                p = p->right;
            }
        }
    }

    当然,也可以通过中序或者后序的方法来转换,也就是入栈和出栈的顺序改变一下。

  • 相关阅读:
    App Inventor
    App Inventor趣味编程(网易课堂)
    学习App Inventor
    小学课程资源网
    mariadb数据类型
    docker监控容器
    docker网络
    项目——基于httpd镜像演示Dockerfile所有的指令
    Dockerfile介绍及指令详情
    docker——harbor
  • 原文地址:https://www.cnblogs.com/idealing/p/3568061.html
Copyright © 2011-2022 走看看