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();
            }
        }
    }
  • 相关阅读:
    HDU 2201 熊猫阿波问题==金刚坐飞机问题
    HDU 2100 (模拟进制加法)
    HDU 2151 Worm
    qsort快速排序
    HDU 1007 (最近点对+qsort对结构体的排序!!!)
    HDU 1348 wall (简单凸包)
    HDU 1392 Surround the Trees(凸包模板)
    HDU 1431素数回文
    HDU 2108 Shape of HDU(判断拐点)
    HDU 2857 Mirror and Light(镜面反射模板)
  • 原文地址:https://www.cnblogs.com/nice-forever/p/6606355.html
Copyright © 2011-2022 走看看