在中序遍歷的基礎上考慮雙鏈表的串聯,中序遍歷用遞迴的手法表現就是:
doublylistnode dbl1 = bstsupport(root.left);
doublylistnode dbl2 = new doublylistnode(root.val);
doublylistnode dbl3 = bstsupport(root.right);
隨後進行子樹串聯工作,即當dbl1非空,就進行dbl1到dbl2的串聯;dbl3非空,就進行dbl2到dbl3的串聯:
if(dbl1!=null)
if(dbl3!=null)
因為上面這種串聯方式,為避免丟失資料,左子樹的返回值應該是左子樹串聯完成後的最後乙個節點,右子樹的返回值應為右子樹串聯完成後的第乙個節點。
在遞迴中如何讓各子樹知道自己是來自左子樹還是右子樹呢?簡單的方法,傳入乙個引數,這裡引數值為1即告訴遞迴函式,他來自左子樹,否則來自右子樹。
剩下的就是從中間點開始遍歷到鍊錶頭尾。
終止遞迴的條件就是傳入的引數為空。if(flag == 1)
return dbl2;
} else
return dbl2;
}
完整**:
public class solution
if(dbl3!=null)
if(flag == 1)
return dbl2;
}else
return dbl2;}}
else
}public doublylistnode bsttodoublylist(treenode root)
while(re.prev!=null)
return re;
}}
LintCode 等價二叉樹
題目描述 檢查兩棵二叉樹是否等價。等價的意思是說,首先兩棵二叉樹必須擁有相同的結構,並且每個對應位置上的節點上的數都相等。樣例 1 1 2 2 and 2 2 4 4 就是兩棵等價的二叉樹。1 1 2 3 and 2 3 4 4就不是等價的。做題思路 本題給出的bool型別的函式來判斷二叉樹是否等價...
lintcode 等價二叉樹
1 題目 檢查兩棵二叉樹是否等價。等價的意思是說,首先兩棵二叉樹必須擁有相同的結構,並且每個對應位置上的節點上的數都相等。樣例 1 1 2 2 and 2 2 4 4就是兩棵等價的二叉樹。1 1 2 3 and 2 3 4 4就不是等價的。2 思路 對兩課二叉樹從以下幾種情況考慮 兩個均空,true...
Lintcode 等價二叉樹
1 問題描述 檢查兩棵二叉樹是否等價。等價的意思是說,首先兩棵二叉樹必須擁有相同的結構,並且每個對應位置上的節點上的數都相等。樣例 1 1 2 2 and 2 2 4 4就是兩棵等價的二叉樹。1 1 2 3 and 2 3 4 4 2 解題思路 從根節點開始判斷兩顆樹是否相等,先判斷結構是否相等,在...