本文介紹了刪除具有特定值的子樹的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我試圖解決的問題是,給定一個(gè)二叉樹,刪除與傳遞的參數(shù)值相同的子樹。以下是我的代碼,但我認(rèn)為它不起作用,因?yàn)楦暮蟮臉渑c原始樹完全相同。
Before:
5
/
3 2
/ /
2 1 4 3
After removal of subtree of value 2:
5
/
3
1
public TreeNode removeSubtree(TreeNode root, int value){
TreeNode copy = root;
removeSubtreeRecursion(copy, value);
return root;
}
public void removeSubtreeRecursion(TreeNode root, int val){
if(root == null) return;
else if(root.val == val) root = null;
else{
removeSubtreeRecursion(root.left, val);
removeSubtreeRecursion(root.right, val);
}
}
推薦答案
您可以使用父節(jié)點(diǎn)而不是當(dāng)前節(jié)點(diǎn)來修改它。可能是這樣的:
public TreeNode removeSubtree(TreeNode root, int value){
if (root != null && root.val == value) return null;
removeSubtreeRecursion(root, value);
return root;
}
public void removeSubtreeRecursion(TreeNode parent, int val) {
if (parent.left != null && parent.left.val == val) parent.left = null;
else removeSubtreeRecursion(parent.left, val);
if (parent.right != null && parent.right.val == val) parent.right = null;
else removeSubtreeRecursion(parent.right, val);
}
在您的實(shí)現(xiàn)root = null
中修改本地引用。您可以在Pass by reference in Java中閱讀有關(guān)此內(nèi)容的更多信息。
這篇關(guān)于刪除具有特定值的子樹的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,