二叉树求节点双亲算法
设计一个算法从二叉树中来查找给定节点的双亲结点
第1个数据是20,作为根结点,\/\/ 第2个数据是15,比20小,作为20的左分支,第3个数据是10,比20和15小,\/\/ 作为15的左分支,第4个数是12,比20和15小,但比10大,作为10的右分支,\/\/ 如此类推,创建完整的二叉树.\/\/ 查找给定节点的双亲结点,用...
设计一个求结点x在二叉树中的双亲结点算法。
正常的方法是用非递归的二叉树后序遍历,当遍历到结点x时,栈顶就是x的双亲
二叉树计算方法
1、二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。建空二叉树Setnull(BT),置BT为空二叉树。树结构对于程序员来说应该不陌生,特别是二叉树,基本只要接触算法这一类的都一定会碰到的。2、求二叉树...
以二叉链表为存储结构,如何编写算法求二叉树中结点x的双亲?
如下代码是通过算法的方式求父节点,其中二叉树的创建是先序方式,如abd##e##c##\\x0d\\x0a\\x0d\\x0a#include "stdlib.h"\\x0d\\x0atypedef int Element;\\x0d\\x0astruct Tree\\x0d\\x0a{ \\x0d\\x0a Element data;\\x0d\\x0a struct Tree *left; \\x0d\\x0a struc...
高度为h的满m叉树中 编号为i的结点的双亲结点的编号
每个节点有m个子女,则x前一个节点的编号为(i-1)*m+1,“+1”是指根节点,则j的编号为:(i-1)*m+1+1 = (i-1)*m+2。楼主现在应该能计算节点i的左数第x个子女的编号了吧?(1<=x<=m)其实您说的应该是d叉堆的性质,树一般用链表而不用数组表示。望采纳 ...
查找双亲结点的算法
查找双亲结点的方法:node* search(node *par,node *cur){ if(cur){ search(cur,cur->lchild);if(cur->data==x)return par;search(cur,cur->rchild);} } 双亲结点就是父节点,一般指的是树状结构,相对于当前的节点而言,它的上层节点就叫做父节点。
二叉树的高度计算和查找结点双亲
求高度的算法:int BTNodeHeight(BTNode *b){int lchildh,rchildh;if(b==NULL)return 0;else { lchild=BTNodeHeight(b->lchild);rchild=BTNodeHeight(b->rchild);return(lchildh>rchildh)?(lchildh+1):(rchildh+1);} } 查找节点:BTNode *FindNode(BTNode *b ,char x){BTNode *p;if(b...
什么是双亲节点
节点是数据结构中树中的概念。双亲节点好像就是父节点
线索二叉树算法
线索二叉树算法是一种对二叉树进行结构增强的技巧,以方便在中序、后序和先序遍历中快速找到结点的前驱和后继。以下是关于中序线索化的描述:在中序线索二叉树中,如果一个结点的ltag为1,它的lchild会指向其前驱。如果ltag为0,前驱则是该结点左子树按中序遍历的最后一个结点。同样,rtag为1的结...
C++,判断二叉树中某结点是其双亲结点的左孩子还是右孩子
输出样例:输出应该是right吧 其实是个完全二叉树的求下标算法。。叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或 L+1; 出于简便起见,完全二叉树通常采用数组而不是链表存储,其存储结构如下: var tree:array[1..n...
大荔县复方回答:[答案] 正常的方法是用非递归的二叉树后序遍历,当遍历到结点x时,栈顶就是x的双亲
农怜13593961409问: 设计一个求结点x在二叉树中的双亲结点算法 说一下算法的主要思想即可 - ?
大荔县复方回答: 可以在中序遍历的基础上,加几条指令.n表示层,初始值为0 下列算法是递归嵌套. 1、n++,遍历当前节点的左子树 2、n--,访问当前节点,如果节点的data==x,那么(意味着找到节点了)打印节点层数 3、n++,遍历当前节点的右子树 递归结束后,如果没有找到X节点不要忘了,打印一下没有找到.
农怜13593961409问: 求一棵二叉树的双亲结点将含有 82 个结点的完全二叉树从根结点开始顺序编号,根结点为第 0 号,其他结点自上向下,同一层自 左向右连续编号.则第 40 号... - ?
大荔县复方回答:[答案] 我觉得答案是19啊.... /*如果使用公式,是利用根节点编号为1的时候,这样x的左儿子=x*2,右儿子为x*2+1*/ 不过现在根节点编号为0,那么左儿子为x*2+1,右儿子是x*2+2 因为40是偶数所以一定是某节点的右儿子,所以解方程:x*2+2=40->x=19 所...
农怜13593961409问: 给定一颗二叉树,用二叉链表表示, 求该树节点N的双亲结点的算法思路 - ?
大荔县复方回答: 对该二叉树一边作遍历一边判断左右子结点是否为N
农怜13593961409问: 二叉树的高度计算和查找结点双亲 - ?
大荔县复方回答: 求高度的算法: int BTNodeHeight(BTNode *b) {int lchildh,rchildh;if(b==NULL)return 0;else{ lchild=BTNodeHeight(b->lchild);rchild=BTNodeHeight(b->rchild);return(lchildh>rchildh)?(lchildh+1):(rchildh+1);} } 查找节点: BTNode *...
农怜13593961409问: 已知一棵具有n个结点的完全二叉树,自行定义该树的某种存储方式,根据该存储方式,设计一个算法,求解给定结点的双亲结点和左右孩子结点 .不用代码 ... - ?
大荔县复方回答:[答案] 由于是完全二叉树,因此直接用顺序存储即可. 给定结点i(i >= 0),可知 非根结点i (i > 0)的父亲结点为P = (i - 1) / 2 按整型规则计算(向下取整) i的左右孩子结点为L和R为L = 2 * (i + 1) - 1和R = 2 * (i + 1)
农怜13593961409问: 数据结构中,怎么写二叉树查找双亲的伪代码?急! - ?
大荔县复方回答: 从根结点出发的有,自下而上的算法貌似没有吧.因为好像二叉树的访问入口都是根的啊.如果采用顺序存储结构,则可以考虑.从根出发应该这样写 Node* Parent(Node* r, datatype data, Node* parent)/*主调函数调用Parent函数时,parent参...
农怜13593961409问: 1023个节点的满二叉树,计算第368节点的父亲和左右儿子 - ?
大荔县复方回答: 如果结点从1开始开始编号,则该结点双亲编号为368/2 = 184,左孩子编号368 *2 = 736,右孩子编号736 + 1 = 737
农怜13593961409问: 寻二叉树由孩子找双亲的算法 - ?
大荔县复方回答: 左右孩子都应该要有父结点的指针,所以不能用else,应该这样: void zhao(Tnode *s) { if(s->l){ zhao(s->l); s->l->p=s; } if(s->r){ zhao(s->r); s->r->p=s; }}
农怜13593961409问: 二叉树两个结点的最近相同父节点怎么求,有什么算法 - ?
大荔县复方回答: 1. 面对这样的场景,选择父亲孩子结构的方式组建二叉树就很容易了.2. 如果是普通的左右结点结构组建的二叉树,那就遍历吧.int GetFather(TreeNode *root, TreeNode *a, TreeNode *b) { int num = 0; if (root == NULL) return 0; else { num = ...