设计算法以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;
}
}
}