Leetcode---每個節點的右向指標--遞迴解法(兩種)
阿新 • • 發佈:2018-12-05
本文接上一篇文章:非遞迴方法
解法一:
- 先將根節點的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);
}