本文介紹了刪除具有特定值的子樹的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我試圖解決的問題是,給定一個二叉樹,刪除與傳遞的參數值相同的子樹。以下是我的代碼,但我認為它不起作用,因為更改后的樹與原始樹完全相同。
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);
}
}
推薦答案
您可以使用父節點而不是當前節點來修改它。可能是這樣的:
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);
}
在您的實現root = null中修改本地引用。您可以在Pass by reference in Java中閱讀有關此內容的更多信息。
這篇關于刪除具有特定值的子樹的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,






