用java实现二叉树的ZigZag遍历

设计算法以ZigZag顺序遍历二叉树

解答

假设两个栈为currentlevel和nextLevel,用一个变量来跟踪当前层的顺序,将节点从currentLevel出栈,并且输出其值,当当前层为从左到右的时候,按照先左孩子后右孩子的顺序压入栈nextLevel当中,因为栈是后进先出的结构,所以下次栈输出顺序为反序输出,另外,如果当前层是从右到左,则按照先右孩子节点后左孩子节点入栈,另外,最后需要在每一层结束的时候,交换这两个栈

代码

void zigZagTraversal(BinaryTreeNode root){
    
    
  BinaryTreeNode temp;
  if(root == null)
   return;
  Stack currentLevel = new Stack();
  Stack nextLevel = new Stack();
  currentLevel.push(root);
  while(currentLevel.isNotEmpty()){
    
    
    temp = currentLevel.pop();
    if(temp != null){
    
    
      System.out.println(temp.getData());
      if(leftToRight){
    
    
        if(temp.getLeft() != null){
    
    
          nextLevel.push(temp.getLeft());
        }
        if(temp.getRight() != null){
    
    
          nextLevel.push(temp.getRight());
        }
      }
      else{
    
    
        if(temp.getRight() != null){
    
    
          nextLevel.push(temp.getRight());
        }
        if(temp.getLeft() != null){
    
    
          nextLevel.push(temp.getLeft());
        }
      }
    }
    if(currentLevel.isEmpty()){
    
    
      if(leftToRight){
    
    
        leftToRight = false;
      }else{
    
    
        leftToRight = true;
      }
      Stack tempLevel = new Stack();
      tempLevel = currentLevel;
      currentlevel = nextLevel;
      nextLevel = temp;
    }
  }

}

猜你喜欢

转载自blog.csdn.net/weixin_37632716/article/details/114849883