• 二元查找树镜像实现


    题目:输入一颗二元查找树(左节点小,右节点大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);
        }
    }
  • 相关阅读:
    Gitcafe绑定自定义域名
    如何优雅地使用Sublime Text
    使用Hexo搭建专属Blog
    How to Use Android ADB Command Line Tool
    雷军北大15分钟演讲:我至少有胆量去想(转)
    浅谈android中的目录结构
    react里 MD5加密
    git忽略相应文件夹,不上传
    antd-mobile的按需加载
    当react 项目使用px2rem
  • 原文地址:https://www.cnblogs.com/cheng07045406/p/3080004.html
Copyright © 2020-2023  润新知