• 二叉树的查找


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


    上一篇文章

    #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##
    */
    


  • 相关阅读:
    Configuration Management
    Android Hooking
    技术趋势总结
    Maven Repo Mirror
    拥抱JAVA
    NPM 更新所有依赖项
    Knockout Mvc Compoment FrameSet With Typescript
    Knockoutjs Component问题汇总
    前端编码规范文档
    优秀程序设计的18大原则
  • 原文地址:https://www.cnblogs.com/hjch0708/p/7554839.html
Copyright © 2020-2023  润新知