删除二叉树子树

简介: 删除二叉树子树

1.算法设计1.首先递归创建一颗二叉树根据输入的节点值创建二叉树根据用户输入的节点值(#表示空节点),使用递归的方式创建二叉树。2.查找要删除的子树的根节点输入要删除的子树的根节点的值,程序在二叉树中查找值为该值的节点,并返回该节点的指针。3.递归删除子树对于当前节点,依次递归删除其左子树和右子树中值为子树根节点值的子树。如果当前节点为空或者当前节点的值不等于子树根节点的值,则直接返回当前节点的指针。如果当前节点的左子树或右子树中存在值为子树根节点的节点,则将该节点的左子树或右子树置为空,并释放该节点的空间。输出删除子树后的二叉树使用中序遍历的方式遍历二叉树,输出删除子树后的节点值序列。5.输出删除成功,结束程序2.程序清单#include <stdio.h>#include <stdlib.h>#define TYPE charstruct biTree { TYPE data; struct biTree lchild; struct biTree rchild;};/ * 释放节点T函数 * @param T /void del(struct biTree T) { if (T) { if (T->lchild)del(T->lchild); if (T->rchild)del(T->rchild); free(T); }}/ 这里设置一个父结点指针 因为free只会释放所在结点里面的内容 并不会置空 **/void delXsub(struct biTree *T, int x) { struct biTree *p = T; if (p->lchild && p->lchild->data == x) { del(p->lchild); p->lchild = NULL; } if (p->rchild && p->rchild->data == x) { del(p->rchild); p->rchild = NULL; } if (p->lchild)delXsub(p->lchild, x); if (p->rchild)delXsub(p->rch


相关文章
|
7月前
【树 - 平衡二叉树(AVL)】F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量
【树 - 平衡二叉树(AVL)】F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量
【二叉树】199. 二叉树的右视图
【二叉树】199. 二叉树的右视图
二叉树子树结点个数
二叉树子树结点个数
65 0
|
算法
【算法】二叉排序树:创建二叉树,并以中序遍历输出
【算法】二叉排序树:创建二叉树,并以中序遍历输出
229 0
二叉树的前中后序遍历以及求深度、叶子节点和二叉树的重建
二叉树的前中后序遍历以及求深度、叶子节点和二叉树的重建
80 0
二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树
二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树
二叉树——404. 左叶子之和
本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助
二叉树——404. 左叶子之和
Day17——平衡二叉树、二叉树所有路径、左叶子之和
Day17——平衡二叉树、二叉树所有路径、左叶子之和
134 0