废话不多说,直接上代码。有问题欢迎提出
前序遍历非递归
void binaryTreePrevOrderNonR(TreeNode root){
if(root == null ){
return ;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while(node != null || !stack.empty()){
while(node != null){
stack.push(node);
System.out.print(node.val+" ");
node = node.left;
}
node = stack.pop();
node = node.right;
}
}
中序遍历非递归
void binaryTreeInOrderNonR(TreeNode root){
if(root == null ){
return ;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while(node != null || !stack.empty()){
while(node != null){
stack.push(node);
node = node.left;
}
node = stack.pop();
System.out.print(node.val+" ");
node = node.right;
}
}
后序遍历非递归
需要注意左子树为空时,还要判断右子树。
void binaryTreePostOrderNonR(TreeNode root){
if(root == null ){
return ;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
TreeNode prev = null;
while(node != null || !stack.empty()){
while(node != null){
stack.push(node);
node = node.left;
}
node = stack.peek();
if(node.right == null || node.right == prev){
System.out.print(node.val+" ");
stack.pop();
prev = node;
node = null;
}else{
node = node.right;
}
}
}
二叉树层序遍历
void binaryTreeLevelOrder(TreeNode root){
if(root == null){
return ;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
System.out.print(queue.peek().val+" ");
TreeNode node = queue.poll();
if(node.left != null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
}
}
}