二叉树的前中序遍历
前序遍历
思路
- 当栈不为空,右节点存在,右节点入栈,左节点存在,左节点入栈,出栈
stack stack
stack.push(p)
while(stack)
{
cout<<node.val
if(node.right){
stack.push(node.right)}
if(node.left){
stack.push(node.left)
node=stack.pop();
}
}
中序遍历
- 当左节点不为空,左节点入栈,子节点为左节点
- 当左节点为空,出栈,子节点为右节点。
while(stack)
{
if(p){
stack.push(p);
p=p.left();
}else{
p= stack.pop();
cout<<p.val;
p=p.right;
}
后序遍历
1.广度收缩
6. stack转换