二叉樹刪除結點
阿新 • • 發佈:2021-10-12
二叉樹刪除節點
1)若果刪除的節點是葉子節點,則刪除該節點 2)如果刪除的節點是非葉子節點,則刪除該樹 思路: 1.如果這個樹是空樹,如果只有root結點,則等價於將二叉樹置空 2.所以,我們是判斷當前節點的子結點是否是需要刪除的節點,而不能去判斷當前這個結點是不是需 要刪除的結點 3.如果當前節點的左子結點不為空,並且左子節點就是要刪除的結點,就將this.left=null 4.如果當前節點的右子結點不為空,並且右子節點就是要刪除的結點,就將this.right=null 5.如果第二步第三步都沒有刪除結點,我們就需要向左子樹進行遞迴刪除 6.如果第四步都沒有刪除這個結點就向右子樹進行遞迴刪除
程式碼實現
HeroNode中的方法 //遞迴刪除結點 //如果刪除的結點是葉子結點,則刪除該結點 //如果刪除的結點是非葉子結點,則刪除該樹 public void delNode(int no){ //3.如果當前節點的左子結點不為空,並且左子節點就是要刪除的結點,就將this.left=null if (this.left!=null&&this.left.no==no){ this.left=null; return; } //4.如果當前節點的右子結點不為空,並且右子節點就是要刪除的結點,就將this.right=null if (this.right!=null&&this.right.no==no){ this.right=null; return; } //5.如果第二步第三步都沒有刪除結點,我們就需要向左子樹進行遞迴刪除 if (this.left!=null){ this.left.delNode(no); } //6.如果第四步都沒有刪除這個結點就向右子樹進行遞迴刪除 if (this.right!=null){ this.right.delNode(no); } } BinaryTree中的程式碼 //刪除結點 public void delNode(int no){ if (root!=null){ //這裡就要立即判斷root是不是要刪除的結點 if (root.getNo()==no){ root=null; }else { root.delNode(no); } }else{ System.out.println("空樹不能刪除"); } } 但是這樣刪除二叉樹,如果刪除左邊節點還是會在右邊節點遞迴一遍