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;
		}
    }

猜你喜欢

转载自blog.csdn.net/tiaochewang219/article/details/84631743
今日推荐