C语言数据结构——遍历二叉树
来源:互联网 发布:windows10 mac主题 编辑:程序博客网 时间:2024/06/06 11:47
1、二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中的所有结点,使得每个节点被访问依次且仅被访问一次。
2、前序遍历:
规则是若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再前序遍历右子树。
遍历的顺序为:1 2 4 8 5 3 6 9 10 7
/*前序遍历算法*/void PreOderTraverse(BiTree T){ if(T==NULL) return; printf("%c",T->data); //显示结点数据,可以更改为其他对结点操作 PreOderTraverse(T->lchild); //先遍历左子树 PreOderTraverse(T->rchild); //最后遍历右子树 }
【操作】:调用PreOderTraverse(T),T的结点不为NULL,所以执行printf,打印数字1;调用PreOderTraverse(T->lchild),调访问1的左孩子,不为NULL,执行printf显示数字2…….
3、中序遍历:
若树为空树,则空操作返回,否则从根节点开始,中序遍历根节点的左子树,然后访问根节点,最后中序遍历右子树。
遍历顺序为:4 8 2 5 1 9 6 10 3 7
/*中序遍历递归算法*/void InOderTraverse(BiTree T){ if(T==NULL) return ; InOderTraverse(T->lchild); //中序遍历左子树 printf("%c",T->data); //显示结点数据,可以更改为其他对结点的操作 InOderTraverse(T->rchild); //最后中序遍历右子树 }
【操作】:调用InOderTraverse(T),T的根节点不为NULL,于是调用InOderTraverse(T->lchild),访问结点2.当前指针不为NULL,继续调用InOderTraverse(T->lchild),访问结点4,不为NULL,继续调用InOderTraverse(T->lchild),访问4的左孩子,发现当前指针为NULL,于是返回,打印当前结点4。然后调用InOderTraverse(T->rchild),访问4的右孩子8,因为8没有左孩子,所以打印8,有因为8没有右孩子,返回,打印结点4的函数执行完毕,返回打印数字2。。。。。。
4、后序遍历:
若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点。
遍历顺序为:8 4 5 2 9 10 6 7 3 1
/*后序遍历递归算法*/void PostOderTraverse(T){ if(T==NULL) return; PostOderTraverse(T->lchild); //先遍历左子树 PostsOderTraverse(T->rchild); //再遍历右子树 printf("%c",T->data); //显示结点数可以更改为其他对结点数据 }
【操作】:由根节点1-2-4,结点4没有左孩子,再看结点4的右孩子8,由于8没有左右孩子,打印8,返回。。。。。。
5、层序遍历:
若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
遍历的顺序为:A B C D E F G H I
/*层序遍历*/void Tree<T>::Level_Order_Traverse(Tree_Node<T>* node){ queue<Tree_Node<T>*> Visit_Queue; Tree_Node<T>* temp; assert(node == root); Visit_Queue.push(node);//根节点入队 while (Visit_Queue.size()) { //输出队头元素 temp = Visit_Queue.front(); cout << temp->data<< " "; //弹出队头元素 Visit_Queue.pop(); //左右节点非空入队 if (temp->left_node != NULL) Visit_Queue.push(temp->left_node); if (temp->right_node != NULL) Visit_Queue.push(temp->right_node); }}
- C语言数据结构——遍历二叉树
- 数据结构C语言二叉树的遍历
- 数据结构——二叉树的遍历问题(C语言)
- C语言数据结构——二叉树
- (C语言)二叉树层次遍历(数据结构十六)
- 数据结构-二叉树的遍历(类C语言描述)
- c语言-数据结构-二叉树-生成、遍历代码
- C语言-数据结构-线索二叉树-生成、遍历源代码
- 数据结构 BFS层次遍历二叉树【C语言版本】
- 二叉树的遍历——c语言
- c 语言 二叉树遍历
- 前序遍历和中序遍历构造二叉树----C语言数据结构
- 数据结构C语言实现系列[7]——二叉树
- 数据结构C语言实现系列——二叉树
- 数据结构C语言实现系列——二叉树[转]
- 数据结构C语言实现系列——二叉树
- 数据结构——二叉查找树(C语言)
- 数据结构—二叉树(C语言实现)
- JavaScript对嵌套数组做扁平化处理
- Android音频系统之音频框架
- .idea文件
- 容器与算法
- 非零基础新手学编程的路径及注意事项
- C语言数据结构——遍历二叉树
- 使用Tomcat安装版启动项目
- 表连接的方法+使用表连接而不是多个表查询+from字句表的顺序
- STL map常用操作
- 精通Dubbo——dubbo2.0源码中的设计模式与SPI介绍
- 【Oracle】——虚拟机安装
- 历经沧桑,唯有研究心静自然
- Add to List 563. Binary Tree Tilt
- 【ubuntu-torch7-problem】Gtk-Message: Failed to load module "canberra-gtk-module"