LeetCode117----填充同一层兄弟节点

给定一个二叉树

struct TreeLinkNode {
  TreeLinkNode *left;
  TreeLinkNode *right;
  TreeLinkNode *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

说明:

  • 你只能使用额外常数空间。
  • 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。

示例:

给定二叉树,

     1
   /  \
  2    3
 / \    \
4   5    7

调用你的函数后,该二叉树变为:

     1 -> NULL
   /  \
  2 -> 3 -> NULL
 / \    \
4-> 5 -> 7 -> NULL

这里要求额外的空闲复杂度是常数项的,所以我们这里考虑用俩引用来解决!
定义一个queue引用,该引用一般指向同一层各个节点,cur引用一般代表的是queue引用的子节点,level引用一般代表的是同一层节点的起始节点,这个引用一般指向的对象不会变
代码如下:
public class LeetCode117 {
	public static class TreeLinkNode {
		int val;
		TreeLinkNode left;
		TreeLinkNode right;
		TreeLinkNode next;

		TreeLinkNode(int x) {
			val = x;
		}
	}

	public void connect(TreeLinkNode root) {
		TreeLinkNode queue = root;
		TreeLinkNode level = new TreeLinkNode(0);
		while (queue != null) {
			level.next = null;
			TreeLinkNode cur = level;
			while (queue != null) {
				if (queue.left != null) {
					cur.next = queue.left;
					cur = cur.next;
				}
				if (queue.right != null) {
					cur.next = queue.right;
					cur = cur.next;
				}
				queue = queue.next;
			}
			queue = level.next;
		}
	}
}

  

 

猜你喜欢

转载自www.cnblogs.com/Booker808-java/p/9069013.html