刪除二叉樹的節點

2021-08-22 10:55:07 字數 1846 閱讀 7417

總體思想:分多種情況討論

1.被刪除節點沒有子樹的情況,直接刪除,並修改對應父節點的指標為空。

2.對於只有乙個子樹的情況,考慮將其子樹作為其父節點的子樹,關於是左還是右,根據被刪除的節點確定。

3.最複雜的是有兩個子數的情況,可以考慮兩種方法,都是同樣的思想:用被刪除節點a的左子樹的最右節點或者a的右子樹的最左節點作為替代a的節點,並修改相應的最左或最右節點的父節點的指標,修改方法類似2 ,不做細緻討論

/*************二叉樹的節點的刪除***********/

/*********該程式描述了從遞迴建立二叉樹到查詢*********/

/*********以及刪除的全過程,也算是對前面幾個*********/

/*********程式的聯習與總結***************************/

#include

#include

#define maxsize 16

//定義二叉樹節點

struct treenode

;typedef treenode node;

typedef node* btree;

//遞迴建立二叉樹

btree create_btree(int* nodelist,int postion)

}/********查詢二叉樹的節點********/

btree search(btree root,int node)

/********第二種查詢方法,記錄其父節點的值********/

btree binary_search(btree point,int node,int *postion)

else}}

return null;

/**********刪除二叉樹節點的操作***********/

btree deletenode(btree root,int node)

if(point->left==null&&point->right==null)

free(point);

return root;

}if(point->left==null&&point->right!=null)

if(point->left!=null&&point->right==null)

if(point->left!=null&& point->right!=null)

point->data=child->data;

if(parent->left=child)

parent->left=child->left;

else

parent->right=child->left;

free(child);

return root;}}

/*********中序遍歷二叉樹*************/

void inorder(btree point)

}/*********主程式測試函式***********/

void main()

;root=create_btree(nodelist,1);

printf("/n the original tree is");

inorder(root);

printf("/n");

printf("input the value of the number /n");

int test;

scanf("%d",&test);

root=deletenode(root,test);

printf("/n the deleted tree is /n");

inorder(root);

printf("/n");

}

二叉樹的節點刪除

刪除 int treedeletedata pnode proot,int data pnode pfind proot pnode pfather null pnode pdelete null 01找到資料為data的節點的位址以及父節點的位址 while pfind null else if ...

二叉樹的刪除節點

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.根據...