打印二叉树的所有最右节点

解法:使用按层遍历二叉树的非递归形式
每次到达此层末尾时就打印。

public class PrintTreeRightNode {
public static class Node{
private Node left;
private Node right;
private int value;
public Node(int value){
this.value = value;
}
}
//按层遍历使用队列。
public void printTreeRightNode(Node head){
if(head==null){
return ;
}
Queue<Node> queue = new ArrayDeque<>();
queue.add(head);
int start = 0;//设置一层的开始位置
int end = 1; //设置一层的结束位置
while (!queue.isEmpty()){
Node node = queue.poll();
start++;
if(node.left!=null){ //添加左孩子
queue.add(node.left);
}
if(node.right!=null){ //添加右孩子
queue.add(node.right);
}
if(start==end){ //当到达末尾时
start = 0;
end = queue.size();//这层完事时,因为存的都是下一层的孩子,所以队列的大小就是孩子的个数。
System.out.print(queue.peek());
}
}
}
}
总结:按层遍历二叉树的变形。

转载于:https://www.cnblogs.com/liuwentao/p/9484569.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值