一、理论基础
满二叉树,完全二叉树,二叉搜索树,平衡二叉搜索树
深度优先遍历和广度优先遍历
存储方式:线性存储和链式存储(通用存储方式)
二、递归遍历
1.递归三部曲
确定递归函数的参数和返回值
确定终止条件
确定单层递归的逻辑
三、迭代遍历
1.编程语言实现递归的逻辑:栈这种数据结构
2.因为前序遍历顺序和处理顺序相同,所以用迭代很好写。先处理当前元素,再压入右节点,再压入左节点。
while(!stack.isEmpty())
{
TreeNode node = stack.pop();
if(node==null) continue;
result.add(node.val);
stack.push(node.right);
stack.push(node.left);
}
注意:!stack.isEmpty()和stack!=null不同,不要混淆。
3.后序遍历可以中右左,再进行翻转。成为左右中。
Collections.reverse(result);
4.中序遍历可以用一个指针遍历各个节点,用栈记录遍历过的各个节点,再用栈弹出元素,处理元素顺序才是中序遍历。
逻辑:如果当前指针不为空。则向栈压入当前节点,指针指向当前节点左节点。如果当前指针为空,那么栈弹出节点,当前指针指向弹出节点的右节点,同时弹出节点加入结果数组。
while (!stack.isEmpty()||current!=null)
{
if(current==null)
{
TreeNode t=stack.pop();
result.add(t.val);
current=t.right;
}else {
stack.push(current);
current=current.left;
}
}
四、统一迭代
未完待续。。。