Leetcode---每个节点的右向指针--非递归解法

每个节点的右向指针

该题用递归解法相比较代码更简洁

题目链接:每个节点的右向指针

思路:

这里的思路和我前面写的层次遍历二叉树的文章基本相同,可以参考之前的思路。

public void connect(TreeLinkNode root) {
		if(root==null) {
			return;
		} 
        //对该二叉树进行层次遍历
		//需要一个队列
		LinkedList<TreeLinkNode> queue = new LinkedList<TreeLinkNode>();
		//当前层和下一层的节点数
		int cur_node = 0,next_node = 0;
		//根节点入队列,遍历
		queue.offer(root);
		++cur_node;
		TreeLinkNode node_front = null;
		TreeLinkNode node_rear = null;
		while(!queue.isEmpty()) {
			node_front = queue.poll();//先出来第一个节点
			--cur_node;
			node_front.next = null;
			//遍历左右子树
			if(node_front.left!=null) {
				queue.offer(node_front.left);
				++next_node;
			}
			if(node_front.right!=null) {
				queue.offer(node_front.right);
				++next_node;
			}
			while(cur_node!=0) {
				//遍历每一层
				//出队列
				node_rear = queue.poll();
				--cur_node;
				if(node_rear.left!=null) {
					queue.offer(node_rear.left);
					++next_node;
				}
				if(node_rear.right!=null) {
					queue.offer(node_rear.right);
					++next_node;
				}
				node_front.next = node_rear;
				node_front = node_rear;
			}
			if(node_rear!=null) {
				node_rear.next = null;
			}
			cur_node = next_node;
			next_node = 0;
		}
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值