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

Leetcode---每個節點的右向指標--遞迴解法(兩種)

本文接上一篇文章:非遞迴方法

解法一:

  • 先將根節點的next置為null,再分別處理左右孩子
  • 左右孩子採用遞迴的方式
  • 這裡的遞迴不是最優的,遞迴過程中產生了重複,而必須這樣寫目的是處理left->right和right->left,經過分析,除最外側的節點之外,均產生了重複的遞迴
	public void connect(TreeLinkNode root) {
		//遞迴演算法連線右向指標
		if(root==null) {
			return;
		}
		root.next = null;
		connect(root.left,
root.right); } public void connect(TreeLinkNode left,TreeLinkNode right) { if(left==null&&right==null) { return; } //連線左右孩子節點 if(left!=null&&right!=null) { left.next = right; right.next = null; //先置為null connect(left.left,left.right); connect(left.right, right.left)
; connect(right.left, right.right); } }

解法二:

  • 處理上面重複遞迴的問題,left->right和right->left是否需要處理就看left->next是否為null,不為null,就需要連線
public void connect(TreeLinkNode root) {
		if(root==null) {
			return;
		}
		if(root.left!=null) {
			root.left.next = root.right;
			root.right.next = root.
next==null?null:root.next.left; } connect(root.left); connect(root.right); }