zoukankan      html  css  js  c++  java
  • 二叉树的查找

    实际上跟我上一篇博文重了,这篇多加了查找


    上一篇文章

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    typedef struct node
    {
        struct node *leftchild;
        struct node *rightchild;
        char data;
    } bitreenode,*bitree;
    void createTree(bitree &T)
    {
        char ch;
        cin>>ch;
        if(ch=='#')T=NULL;
        else
        {
            T=new node;
            T->data=ch;
            createTree(T->leftchild);
            createTree(T->rightchild);
        }
    }
    void preTraverse(bitree &T)
    {
        if(T==NULL)return ;
        cout<<T->data;
        preTraverse(T->leftchild);
        preTraverse(T->rightchild);
    }
    void intraverse(bitree &T)
    {
        if(T==NULL)return ;
        intraverse(T->leftchild);
        cout<<T->data;
        intraverse(T->rightchild);
    
    }
    void posttraverse(bitree &T)
    {
        if(T==NULL)return ;
        posttraverse(T->leftchild);
        posttraverse(T->rightchild);
        cout<<T->data;
    }
    
    node* TreeFindNode(bitree &treeNode,char data)//二叉树的查找
    {
        node *ptr;//这里可以换成bool类型或者int类型的,也就是说返回值不一定要用指针,这仅仅是个标志而已
        if(treeNode==NULL)
        {
            return NULL;
        }
        else
        {
            if(treeNode->data==data)
            {
                return treeNode;
            }
            else        //分别向左右子树查找
            {
                if(ptr=TreeFindNode(treeNode->leftchild,data))  //左子树递归查找
                {
                    return ptr;
                }
                else if(ptr=TreeFindNode(treeNode->rightchild,data))         //右子树递归查找
                {
                    return ptr;
                }
                else
                {
                    return NULL;
                }
            }
        }
    }
    //比如像下面这样
    /*
    int TreeFindNode(bitree &treeNode,char data)//二叉树的查找
    {
        if(treeNode==NULL)
        {
            return 0;
        }
        else
        {
            if(treeNode->data==data)
            {
                return 1;
            }
            else        //分别向左右子树查找
            {
                if(TreeFindNode(treeNode->leftchild,data))  //左子树递归查找
                {
                    return 1;
                }
                else if(TreeFindNode(treeNode->rightchild,data))         //右子树递归查找
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
        }
    }*/
    int main()
    {
        int i,j,k;
        node *T;
        createTree(T);
        cout<<endl;
        preTraverse(T);
        cout<<endl;
        intraverse(T);
        cout<<endl;
        posttraverse(T);
        if(TreeFindNode(T,'X')!=NULL)printf("
    YES
    ");
        else printf("
    NO
    ");
        return 0;
    }
    /*
    AB#D##C#E##
    */
    


  • 相关阅读:
    VS 高级版本新建的项目如何降级使低版本 VS 可以打开
    Windows下安装VScode,并使用,以及中文配置
    使用Cadence绘制PCB流程
    VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
    如何对Redis设置密码,提高安全性
    关于redis启动流程介绍
    Redis笔记,安装和常用命令
    阿里云主机(aliyun-Linux) x64安装Redis详解
    几款开源的图形化Redis客户端管理软件
    redis配置文件redis.conf中文版(基于2.4)
  • 原文地址:https://www.cnblogs.com/hjch0708/p/7554839.html
Copyright © 2011-2022 走看看