赞
踩
树是n个节点的有限集
每个节点事多有两颗子树的树称为 二叉树
该实验目标实现以下二叉树:
设:
D -- 访问根节点,输出根节点;
L -- 递归遍历左二叉树;
R -- 递归遍历右二叉树;
二叉树遍历方案:
DLR:先序遍历(先遍历根节点,在遍历左二叉树,再遍历右二叉树)
LDR:中序遍历(先遍历左节点,在遍历根二叉树,再遍历右二叉树)
LRD:后序遍历(先遍历左节点,在遍历右二叉树,再遍历根二叉树)
一个成员用来保存左侧子节点的地址
一个成员用来保存右侧子节点的地址
一个成员用来保存数据值。
(注意: 如果没有左节点或者右节点赋值为NULL)
- typedef struct node
- {
- struct node *lchild;
- int data;
- struct node *rchild;
- }NODE;
- #include<stdio.h>
-
- typedef struct node
- {
- struct node *lchild;
- int data;
- struct node *rchild;
- }NODE;
-
- // 先序遍历 DLR
- void preOrder(NODE *h)
- {
- if(h)
- {
- printf("%d ",h->data);
- preOrder(h->lchild);
- preOrder(h->rchild);
- }
- }
-
- // 中序遍历 LDR
- void middleOrder(NODE *h)
- {
- if(h)
- {
- middleOrder(h->lchild);
- printf("%d ",h->data);
- middleOrder(h->rchild);
- }
- }
-
- // 后序遍历 LRD
- void postOrder(NODE *h)
- {
- if(h)
- {
- postOrder(h->lchild);
- postOrder(h->rchild);
- printf("%d ",h->data);
- }
- }
-
- int main()
- {
- // 指向根节点的指针
- NODE *head;
-
- // 根节点
- NODE root;
-
- // 定义6个节点
- NODE n1;
- NODE n2;
- NODE n3;
- NODE n4;
- NODE n5;
- NODE n6;
-
- head = &root;
-
- // 构造二叉树
- root.lchild = &n1;
- root.data = 0;
- root.rchild = &n2;
-
- n1.lchild = &n3;
- n1.data = 1;
- n1.rchild = &n4;
-
- n2.lchild = NULL;
- n2.data = 2;
- n2.rchild = &n5;
-
- n3.lchild = NULL;
- n3.data = 3;
- n3.rchild = NULL;
-
- n4.lchild = NULL;
- n4.data = 4;
- n4.rchild = NULL;
-
- n5.lchild = &n6;
- n5.data = 5;
- n5.rchild = NULL;
-
- n6.lchild = NULL;
- n6.data = 6;
- n6.rchild = NULL;
-
- printf("先序遍历DLR:");
- preOrder(head);
- printf("\n");
-
- printf("中序遍历LDR:");
- middleOrder(head);
- printf("\n");
-
- printf("后序遍历LRD:");
- postOrder(head);
- printf("\n");
-
- return 0;
- }
演示效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。