//--------刪除-----------
int treedeletedata(pnode *proot,int data)
pnode pfind = *proot;
pnode pfather = null;
pnode pdelete = null;
//01找到資料為data的節點的位址以及父節點的位址
while(pfind != null)else if(data < pfind->data)else
} //02 沒找到
if(pfind == null)
//03 已經找到
//03-1 沒有左子樹,刪除的就是pfind那個節點
if(pfind->left == null)elseelse
} free(pfind);
return 0;
} //03-2左子樹右邊沒有節點,則刪除pfind->left對應的節點
if(pfind->left->right == null)
//03-3 左子樹右邊最少有乙個節點 ,往右邊一直找找到最右節點,刪除
pfather = pfind->left;
pdelete = pfather->right;
while(pdelete->right != null)
pfather->right = pdelete->left;
pfind->data = pdelete->data;
free(pdelete);
return 0;
}
刪除二叉樹的節點
總體思想 分多種情況討論 1.被刪除節點沒有子樹的情況,直接刪除,並修改對應父節點的指標為空。2.對於只有乙個子樹的情況,考慮將其子樹作為其父節點的子樹,關於是左還是右,根據被刪除的節點確定。3.最複雜的是有兩個子數的情況,可以考慮兩種方法,都是同樣的思想 用被刪除節點a的左子樹的最右節點或者a的右...
二叉樹的刪除節點
package com.ran public class hello 定義二叉樹 class erchashu 前序遍歷 public void qianxu else public void shanchu int no else else public void zhongxu else pub...
排序二叉樹 刪除節點
前面 我們已經了解了什麼是排序二叉樹以及排序二叉樹的遍歷和新增元素,現在我們一起來看一下,排序二叉樹是如何刪除元素的。步驟先找到要刪除的節點 targetnode 找到要刪除節點的父節點 parent 一 刪除葉子節點 1.確定 targetnoe 是 parent 的左子節點還是右子節點 2.根據...