递归算法`
void pre(root){
if(root==null)return;
else{
print(root.val);//中序遍历和后序遍历只需要改变此行代码的顺序即可
pre(root.left);
pre(root.right);
}
}
先序遍历非递归算法
void pre2(root){
Stack s;
TreeNode node=root;
while(node!=null||!s.isEmpty()){
while(node!=null)
{
print(node.val);//重点还是变换此行代码顺序
s.push(node);
node=node.left;
}
if(!s.isEmpty())
{
node =s.pop();
node=node.right;
}
}
}
中序遍历非递归
void pre2(root){
Stack s;
TreeNode node=root;
while(node!=null||!s.isEmpty()){
while(node!=null)
{
s.push(node);
node=node.left;
}
if(!s.isEmpty())
{
node =s.pop();
print(node.val);
node=node.right;
}
}
}
后序遍历非递归
//借助两个栈来实现
void post(
if(root==null)return;
Stack s1,s2;
TreeNode node=root;
while(node!=null||!s1.isEmpty())
{
while(node!=null){
s1.push(node);//s1.为临时存储节点的栈,s2为存储所有节点的栈
s2.push(node);//存入根节点
node=node.right;//栈的先进后出特性,所以以根,右,左的顺序入栈。一直往右遍历。
}
if(!s1.isEmpty()){
node=s1.pop();
node=node.left;
}
}
while(!s2.isEmpty()){
node= s2.pop;//出栈顺序则为左右根
print(node.val);
}
)
层次遍历
//使用队列来实现
void level(root){
if(root==null)return;
Queue q;
TreeNode node = root
q.offer(root);
while(!q.isEmpty()){
node =q.poll();
print(node.val);
if(node.left!=null)q.offer(node.left);
if(node.right!=null)q.offer(node.right);
}
}