116. Populating Next Right Pointers in Each Node
一、题目
1、审题
2、分析
给出一个完全二叉树,添加二叉树的 next 指针指向。
二、解答
1、思路:
方法一、
采用队列进行层次遍历,遍历时添加 next 指针。
public void connect(TreeLinkNode root) { if(root == null) return; Queue<TreeLinkNode> queue = new LinkedList<TreeLinkNode>(); queue.add(root); TreeLinkNode node; while(!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { node = queue.poll(); if(i < size - 1) node.next = queue.peek(); if(node.left != null) { queue.add(node.left); } if(node.right != null) { queue.add(node.right); } } } }
方法二、
利用两个指针进行层次遍历,添加 next 指针
public void connect(TreeLinkNode root) { if(root == null) return; TreeLinkNode pre = root; TreeLinkNode cur; while(pre.left != null) { cur = pre; while(cur != null) { cur.left.next = cur.right; if(cur.next != null) cur.right.next = cur.next.left; cur = cur.next; } pre = pre.left; } }
方法三、
利用递归实现每一层的 next 指针。
public void connect(TreeLinkNode root) { if(root == null) return; if(root.left != null) { root.left.next = root.right; if(root.next != null) root.right.next = root.next.left; } connect(root.left); connect(root.right); }