• C语言搜索二叉树测试代码


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <stdbool.h>
      4 
      5 typedef int DATA;
      6 typedef struct _SNode_
      7 {
      8     DATA data;
      9     struct _SNode_ *p_Right, *p_Left;
     10 } SNode;
     11 
     12 // 创建二叉树
     13 SNode *CreateTree(const DATA d)
     14 {
     15     SNode *m_root = (SNode *)malloc(sizeof(SNode));
     16     m_root->data = d;
     17     m_root->p_Left = m_root->p_Right = NULL;
     18     return m_root;
     19 }
     20 // 插入右子树
     21 void InsertRight(SNode *p, const DATA d)
     22 {
     23     SNode *pNew = CreateTree(d);
     24     p->p_Right = pNew;
     25 }
     26 // 插入左子树
     27 void InsertLeft(SNode *p, const DATA d)
     28 {
     29     SNode *pNew = CreateTree(d);
     30     p->p_Left = pNew;
     31 }
     32 // 前序遍历DLR
     33 void PreOrder(SNode *p)
     34 {
     35     printf("%d ", p->data);
     36     if (p->p_Left)
     37         PreOrder(p->p_Left);
     38     if (p->p_Right)
     39         PreOrder(p->p_Right);
     40 }
     41 // 中序遍历LDR
     42 void InOrder(SNode *p)
     43 {
     44     if (p->p_Left)
     45         InOrder(p->p_Left);
     46     printf("%d ", p->data);
     47     if (p->p_Right)
     48         InOrder(p->p_Right);
     49 }
     50 // 后序遍历LRD
     51 void PostOrder(SNode *p)
     52 {
     53     if (p->p_Left)
     54         PostOrder(p->p_Left);
     55     if (p->p_Right)
     56         PostOrder(p->p_Right);
     57     printf("%d ", p->data);
     58 }
     59 // 查找二叉树中的元素
     60 bool LookUp(SNode *p, const DATA d)
     61 {
     62     while (p)
     63     {
     64         if (p->data == d)
     65             return true;
     66         else if (p->data > d)
     67             p = p->p_Left;
     68         else
     69             p = p->p_Right;
     70     }
     71     return false;
     72 }
     73 // 创建搜索二叉树
     74 void SetAt(SNode *p, const DATA d)
     75 {
     76     SNode **ppRoot = &p;
     77     while (*ppRoot)
     78     {
     79         if ((*ppRoot)->data < d)
     80             ppRoot = &(*ppRoot)->p_Right;
     81         else if ((*ppRoot)->data > d)
     82             ppRoot = &(*ppRoot)->p_Left;
     83     }
     84     SNode *pNew = CreateTree(d);
     85     *ppRoot = pNew;
     86 }
     87 
     88 int main()
     89 {
     90     SNode *pRoot = CreateTree(30);
     91     SetAt(pRoot, 75);
     92     SetAt(pRoot, 20);
     93     SetAt(pRoot, 40);
     94     SetAt(pRoot, 10);
     95     SetAt(pRoot, 60);
     96     SetAt(pRoot, 50);
     97 
     98     if (LookUp(pRoot, 52))
     99         printf("找到了!
    ");
    100     else
    101         printf("没有找到!
    ");
    102 
    103     if (LookUp(pRoot, 40))
    104         printf("找到了!
    ");
    105     else
    106         printf("没有找到!
    ");
    107 
    108     InOrder(pRoot);
    109 
    110     return 0;
    111 }
  • 相关阅读:
    3月27日
    IndiaHacks 2016
    华东交通大学2017年ACM“双基”程序设计竞赛 1003
    华东交通大学2017年ACM“双基”程序设计竞赛 1002
    华东交通大学2017年ACM“双基”程序设计竞赛 1008
    华东交通大学2017年ACM“双基”程序设计竞赛 1010
    华东交通大学2017年ACM“双基”程序设计竞赛 1001
    OpenCV3的配置(VS2015)
    Python 起步 多版本共存配置
    栈与队列试题中的操作代码
  • 原文地址:https://www.cnblogs.com/veis/p/12579390.html
Copyright © 2020-2023  润新知