zoukankan      html  css  js  c++  java
  • 二叉树的镜像

    思路

    采用递归的思想。对于根节点,若其左子树或右子树不为空(为空返回),则互换左、右子树,然后对于左、右子树,分别递归上述处理方法,直至叶节点。

    实现代码如下:

    #include<iostream>
    using namespace std;
    struct treenode
    {
        char data;
        treenode *lchild;
        treenode *rchild;
    };
    //先序创建二叉树
    treenode *init()
    {
        char data;
        cout<<"please inpur a number:(#代表NULL)"<<endl;
        cin>>data;
        if(data=='#')
            return NULL;
        treenode *head=new treenode;
        head->data=data;
        head->lchild=init();
        head->rchild=init();
        return head;
    }
    //先序递归遍历二叉树
    void print(treenode *head)
    {
        if(head)
        {
            cout<<head->data<<"    ";
            print(head->lchild);
            print(head->rchild);
        }
    }
    //转换二叉树(镜像)
    void change(treenode *head)
    {
        if(head==NULL)
            return;
        if(head->lchild==NULL && head->rchild==NULL)
            return;
        //交换该结点的左右结点
        treenode *temp=head->lchild;
        head->lchild=head->rchild;
        head->rchild=temp;
        //递归左子树
        if(head->lchild)
            change(head->lchild);
        //递归右子树
        if(head->rchild)
            change(head->rchild);
    }

    测试代码以及运行结果:

  • 相关阅读:
    堆排序回顾
    动画函数封装
    mouseenter 和mouseover的区别
    元素滚动 scroll 系列
    元素可视区 client 系列
    元素偏移量 offset 系列
    JS执行机制
    BOM
    常用键盘事件
    常用鼠标事件
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4540798.html
Copyright © 2011-2022 走看看