@(C Plus Plus)
前些天为了准备一些面试,把本科学习的笔记翻出来,是之前参加的魔鬼训练营的学习笔记,重点是关于树的部分,另外还有一些链表和操作系统相关的东西,后续几天认真复习整理一下。手写了代码,还是手动的敲一遍,增加印象。
前序、中序和后序遍历二叉树(递归)
首先定义数的节点:
1 | struct BTNode |
先序遍历算法(递归)
1 | void preorder(BTNode *T) |
中序遍历算法(递归)
1 | void inorder(BTNode *T) |
后续遍历算法(递归)
1 | void postorder(BTNode *T) |
前序、中序和后序遍历二叉树(非递归)
树的遍历非递归的方法一般多少采用栈数据结构辅助完成的。其中先序遍历和中序遍历算法比较简单。只需要一个栈就足够了。
先序遍历(非递归)
1 | void dpreorder(BTNode *T) |
中序遍历(非递归)
1 | void dinorder(BTNode *T) |
后序遍历二叉树的非递归算法要复杂一些,需要用到辅助标记,先序遍历是在入栈之前就访问,中序遍历是在第一次访问栈顶的时候就访问,后序遍历不一样,需要两次访问栈顶的时候才出栈并打印。
下面是后序遍历二叉树(非递归)
1 | typedef enum{L,R} tagtype; |
构造二叉树
给定一个二叉树的先序遍历和中序遍历序列,构造一颗二叉树。正好创建一个二叉树验证前面的程序。
程序代码如下:
1 | BTNode *CreateTree(int pre[],int in[],int beg1,int end1,int beg2,int end2) |
完全二叉树遍历
给定一个完全二叉树,存储方式是使用数组方式存储的,空节点存储的是0.
题目要求是给定两个节点的位置i
和j
,求解这两个节点的最近的双亲。
1 | int comparent(int i,int j) |
求二叉树的节点数
用递归的方法比价简单
1 | int finnum(BTNode *T) |
层次遍历二叉树和树的高度
1 | void findlevel(BTNode *T,int &level) |
参考
- 本科参加魔鬼训练营笔记