二叉树
建立
即通过不断插入节点来建立出一棵二叉树。Node类定义树中每个节点的结构,Tree类定义一棵树,包括根节点和一个表示元素父子关系的队列。当树为空,待插入节点就作为根节点。否则针对当前队首的元素,查看它的左右孩子情况,若队首左孩子为空,待插入节点作为队首左孩子,并将此节点的值加入队列。若队首左孩子不为空,待插入节点作为队首元素的右孩子,同时将此节点的elem加入队列。队首元素被弹出,从而配合下一轮插入时myQueue[0]。
非递归的中序 先序遍历
之所以放在一个小标题写,就是两者大体思路一致。
中序 : 1.先找到最左边的结点 且依次入栈
2.对栈顶元素出栈 如果它没有右孩子 则将它出栈 否则对其右孩子执行1。
先序:借助栈,先访问结点
1.再找到最左的结点
2.如果栈顶元素有右孩子,对其执行1。
后序遍历
考研用的是借助栈。
1.找到最左的结点 依次入栈
2.对栈顶元素出栈 如果有右孩子且未被访问 对右孩子执行1 否则出栈
之后都用双栈,stack1记录后序遍历的逆序,存放在stack2里,最后输出stack2,即后序遍历。
1 | # -*- coding:utf-8 -*- |
栈
1 | # -*- coding:utf-8 -*- |
队列
1 | # -*- coding:utf-8 -*- |
in a word
继续开垦,数据结构的实现,很基础,很必要。