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全备文件中恢复单个库或者单个表
    594. Longest Harmonious Subsequence
    205. Isomorphic Strings
    274. H-Index
    219. Contains Duplicate II
    217. Contains Duplicate
    操作系统-多用户如何理解(Linux)
    Java-面向对象
    C++-有感
    C++-Typedef结构体遇上指针
  • 原文地址:https://www.cnblogs.com/nice-forever/p/6606355.html
Copyright © 2011-2022 走看看