1. 程式人生 > >Leetcode---每個節點的右向指標--非遞迴解法

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