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);
        }
    }
  • 相关阅读:
    vue 兼容ie 下载文件
    IDEA maven项目添加自己的jar包依赖
    mongodb 用户权限操作
    springboot + aspect
    Enum枚举类
    线上CPU飙升100%问题排查
    Linux零拷贝技术
    Java线程池实现原理及其在美团业务中的实践
    深入解析String#intern
    Java对象内存布局
  • 原文地址:https://www.cnblogs.com/cheng07045406/p/3080004.html
Copyright © 2011-2022 走看看