zoukankan      html  css  js  c++  java
  • 二元查找树镜像实现

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

    例如输入:

    8
    / \
    6 10
    /\ /\
    5 7 9 11

    输出:

    8
    / \
    10 6
    /\  /\
    11 9  7 5

    数据结构如下:

    typedef struct BinaryTreeNode
    {
        int m_value;
        BinaryTreeNode *m_left;
        BinaryTreeNode *m_right;
    }*Tree_root;

    在遍历二元查找树时每访问到一个结点,交换它的左右子树。这种思路用递归不难实现;

    /*
    由于递归的本质是编译器生成了一个函数调用的栈,
    因此用循环来完成同样任务时最简单的办法就是用一个辅助栈来模拟递归。
    */
    void MirrorRecursively(Tree_root root)
    {
        if(!root)
            return;
        BinaryTreeNode *temp = root->m_left;
        root->m_left = root->m_right ;
        root->m_right = temp;
        if(root->m_left)
            MirrorRecursively(root->m_left);
        if(root->m_right)
            MirrorRecursively(root->m_right);
    }
    //下面是用栈来模拟实现
    void Mirror_using_stack(Tree_root root)
    {
        if(!root)
            return;
        stack<BinaryTreeNode *>Binary_Stack;
        Binary_Stack.push(root);
        while(Binary_Stack.size())
        {
            BinaryTreeNode *pNode = Binary_Stack.top();
            Binary_Stack.pop();
            BinaryTreeNode *temp = pNode->m_left;
            pNode->m_left = pNode->m_right ;
            pNode->m_right = temp;
            if(pNode->m_left)
                Binary_Stack.push(pNode->m_left);
            if(pNode->m_right)
                Binary_Stack.push(pNode->m_right);
        }
    }
  • 相关阅读:
    Redis --> Redis架构设计
    Redis --> 为redis分配新的端口
    大数据 --> CAP原理和最终一致性
    大数据 --> 一致性Hash算法
    大数据 --> 分布式服务框架Zookeeper
    网络通信 --> Linux 五种IO模型
    网络通信 --> 同步、异步、阻塞与非阻塞介绍
    网络通信 --> Socket、TCP/IP、HTTP、FTP及网络编程
    SoC总线专题
    RISC-V评估系列
  • 原文地址:https://www.cnblogs.com/cheng07045406/p/3080004.html
Copyright © 2011-2022 走看看