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();
            }
        }
    }
  • 相关阅读:
    Java上等价类划分测试的实现
    软件测试の因果图法的测试运用
    display: block; 和 display: inline; 的区别
    CSS实现垂直居中
    CSS中实现水平居中
    HTTP头部信息
    HTTP PUT方法和POST方法的区别
    理解 ajax xhr jsonp
    深入理解JavaScript系列
    Angular 1.x 指令笔记
  • 原文地址:https://www.cnblogs.com/nice-forever/p/6606355.html
Copyright © 2011-2022 走看看