标题:Devc++ 二叉树实现求大佬指教
取消只看楼主
h20190611008
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-5-3
结帖率:0
已结贴  问题点数:20 回复次数:0 
Devc++ 二叉树实现求大佬指教
#include<stdio.h>
#include<stdlib.h>
/*
    1.了解二叉树
        1.1基本概念
             根结点
             左子树指针
             右子树指针
             孩子结点
             父节点
             兄弟结点
             姐妹结点
    2.二叉树的遍历
*/
//描述单一个体
typedef struct treeNode{
    char data;//数据域字符表示
    struct treeNode* LChild;
    struct treeNode* RChild;
}TREE,LPTREE;

/*
LPSTR char *
LPCSTR const char*
*/
//别名中lp一般表示是指针别名

//没有规律的树
void insertNode(int LPTREE[],int LChild,char *LPTREE,char *RChild)
{
    parentNode->LChild = LChild;
    parentNode->RChild = RChild;
}
//打印当前结点中的元素
void printfCurNodeDate(LPTREE curDate)
{
    printf("%c\t,curData->data");
 }
 //递归法:领悟
 //先序遍历:根 左 右
 void preOrder(LPTREE root)
 {
     if(root != NULL)
     {
         printCurNodeData(root);//根
         preOrder(root->LChild);//左
        preOrder(root->RChild);//右
     }
  }
void preOderByStack(LPTRUE root)
{
    if(root == NULL) return;
    struct treeNode* stack[10];//存储每次打印节点位置
    int stackTop = -1; //栈顶标记
    //stackTop=50
    //栈容量的是0-50

    LPTREE pMove = root;//从根结点开始做打印
    while(stackTop != -1 ||pMove)
    {
        //根 左 右
        //找到最左边
        while(pMove)
        {
            //把路径入栈+打印走过的节点
            printf("%c\t",pMove->data) ;
            stack[++stakckTop]= pMove;
            pMove = pMove->LChild
         }
         //if(stackTop!=-1)
         {
             pMove = stack[stackTop];//获取栈顶元素
            stackTop--;//出栈
            pMove=pMove->RChild;
          }
    }         
 }
//中序遍历:
void midOrder(LPTREE root)
 {
     if(root != NULL)
     {
         midOrder(root->LChild);//左
         printCurNodeData(root);//根  
        midOrder(root->RChild);//右
     }
  }
//后序遍历:
void lastOrder(LPTREE root)
 {
     if(root != NULL)
     {
         lastOrder(root->LChild);//左
         printCurNodeData(root);//根  
        lastOrder(root->RChild);//右
     }
  }



int main()
{
    LPTREE A = createNode('A');
    LPTREE B = createNode('B');
    LPTREE C = createNode('C');
    LPTREE D = createNode('D');
    LPTREE E = createNode('E');
    LPTREE F = createNode('F');
    LPTREE G = createNode('G');
    insertNode(A,B,C);
    insertNode(B,D,NULL);
    insertNode(D,NULL,G);
    insertNode(C,E,F);
    printf("先序遍历:\n") ;
    preOrder(A);
    printf("\n");
    preOderByStack(A);
     
    printf("\n中序序遍历:\n") ;
    preOrder(A);
    printf("\n后序遍历:\n") ;
    preOrder(A);
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: printf 遍历 二叉树 NULL void 
2020-05-03 17:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501404-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.384654 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved