zoukankan      html  css  js  c++  java
  • 经典面试题:二输入一颗二元查找树,得到树的镜像(递归和循环实现)

    题目:

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

    输出: 
         8 
        /  
       10 6 
      /  /  
     11 9 7 5

    思路:使用递归的话,前序、中序、后序都能很简单地完成这个问题。使用循环的话,也就是非递归,则需要使用层次遍历的方法,层级遍历一般则是借助了队列完成先进先出的功能。

    如下,递归我采用稍微有点改变的中序遍历,队列我直接使用双向队列deque,包含了queue和stack的功能,比较方便。

    //递归版本
    void ReverseBST(TreeNode* root)
    {
        if(root!=NULL)
        {
            ReverseBST(root->left);
            swap(root->left, root->right);
            ReverseBST(root->left); //左右进行了交换,所以这里还用左结点
    
        }
    }
    //循环版本
    void ReverseBST2(TreeNode* root)
    {
        deque<TreeNode*> treeDeque;
        while(root!=NULL)
        {
            treeDeque.push_back(root->left);
            treeDeque.push_back(root->right);
            swap(root->left, root->right);
            if(treeDeque.empty())
            {
                break;
            }
            else
            {
                root = treeDeque.front();
                treeDeque.pop_front();
            }
        }
    }
  • 相关阅读:
    mysql安装与基本管理,mysql密码破解
    非阻塞IO模板
    多路复用IO模板
    第四模块:网络编程进阶&数据库开发 练习
    理解Queue队列中join()与task_done()的关系
    第四模块:网络编程进阶&数据库开发 口述
    SQLite
    rest_cherrypy
    SaltStack Returners
    kafka集群安装,配置
  • 原文地址:https://www.cnblogs.com/nice-forever/p/6606355.html
Copyright © 2011-2022 走看看