首页 > 其他 > 详细

【树、二叉树】树的遍历

时间:2020-02-25 16:29:51      阅读:53      评论:0      收藏:0      [点我收藏+]

树的遍历:

先序(根左右):先输出根节点,再递归输出左右子节点

中序(左根右):先递归输出左子节点,再输出根节点,再输出右子节点

tips:左右子节点分别为2i+1和2i+2;

先序遍历的代码:

void preOrder(int *arr,int i)
{
    //设计递归出口
    if(i>=len(arr))//其中len是自定义的计算数组长度的函数 
        return;
    printf("%d",arr[i]);//先输出根节点
    preOrder(arr,2*i+1);//再递归调用输出左结点
    preOrder(arr,2*i+2);//再递归调用输出右结点; 
}

中序遍历的代码:和先序思路一样,只需要交换一下输出顺序即可

void inOrder(int *arr,int i)
{
    //设计递归出口
    if(i>=len(arr))//其中len是自定义的计算数组长度的函数 
        return;
    inOrder(arr,2*i+1);//先递归调用输出左结点
    printf("%d",arr[i]);//再输出根节点
    inOrder(arr,2*i+2);//再递归调用输出右结点; 
}

完整代码:

#include<stdio.h>
void preOrder(int *arr,int i);
void inOrder(int *arr,int i);
int len(int *a); 
int main()
{
    int arr[10]={78,56,34,43,4,1,15,2,23};
    preOrder(arr,0);
//    inOrder(arr,0);
    return 0;
}
void preOrder(int *arr,int i)
{
    //设计递归出口
    if(i>=len(arr))//其中len是自定义的计算数组长度的函数 
        return;
    printf("%d ",arr[i]);//先输出根节点
    preOrder(arr,2*i+1);//再递归调用输出左结点
    preOrder(arr,2*i+2);//再递归调用输出右结点; 
}
void inOrder(int *arr,int i)
{
    //设计递归出口
    if(i>=len(arr))//其中len是自定义的计算数组长度的函数 
        return;
    inOrder(arr,2*i+1);//先递归调用输出左结点
    printf("%d ",arr[i]);//再输出根节点
    inOrder(arr,2*i+2);//再递归调用输出右结点; 
}

int len(int *a)
 {
     int len=0;
     int i=0;
     while(a[i]!=\0)
     {
         len++;
         i++;
     }
     return len;
 }

技术分享图片

结合图示查看验算结果

先序遍历:

技术分享图片

中序遍历:

技术分享图片

【树、二叉树】树的遍历

原文:https://www.cnblogs.com/jessie99/p/12362241.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!