二叉树的种类、存储方式、’遍历方式以及定义。二叉树2种存储方式:顺序存储,用数组来存;链式存储。相对于链表,链式存储的二叉树节点的定义方式如下:
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x):val(x),left(NULL),right(NULL) { } };
二叉树的节点里多了一个指针,有2个指针,指向左右孩子。
遍历方式:1 前序遍历(中左右) 2 中序遍历(左中右)3 后续遍历(左右中)
递归算法注意点1、确定递归函数的参数和返回值。2、确定终止条件3、确定单层递归的逻辑
匹配问题都是栈的强项,递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中。
二叉树的迭代遍历。中序遍历左中右(迭代法)和后序遍历(左右中)前序遍历(中左右)的迭代法实现是不一样的。这是因为前序遍历中访问节点和处理节点可以同步处理,但是中序遍历无法做到同步。
二叉树的统一迭代法,中序一会用栈遍历,一会又用指针来遍历,无法解决访问节点和处理节点(将元素放进结果集)不一致的情况。因此,我们可以将访问的节点放入栈中,把要处理的节点也放入栈中但是要做标记,就是要处理的节点放入栈之后,紧接着放入一个空指针作为标记。
将访问的节点直接加入到栈中,但是要处理的节点则后面放入一个空节点,这样只有空节点弹出的时候,才将下一个节点放进结果集。