❶ 二叉树如何用算法找到某结点的所有祖先
#include<stdio.h>
typedef char DataType;
typedef struct BinTreeNode *PBinTreeNode;
struct BinTreeNode
{
DataType info; // 数据域
PBinTreeNode llink, rlink; //左右指针
};
typedef struct BinTreeNode *BTree; //表示二叉树类型
typedef struct BinTreeNode *BNode; //表示二叉树节点类型
BTree CreateEmptyTree() //建空二叉树
{
BTree atree=(BTree)malloc(sizeof(struct BinTreeNode));
if(atree!=NULL)
{
atree->llink=NULL;
atree->rlink=NULL;
}
else
printf("Out of space! \n"); /*创建失败*/
return (atree);
}
void Parent(BTree t,BNode a,BNode &p)//t为二叉树根节点,a为目标子节点,p目标父节点
{
if(t)
{
if(t->llink == a || t->rlink == a)//a为需要查找的二叉树节点值
{
p=t;
}
else
{
Parent(t->llink, a, p);
Parent(t->rlink,a, p);
}
}
}
BTree Insert(BTree &T,char x) //构造T->info=x,T->llink=NULL
{
T=CreateEmptyTree();
T->info = x;
T->llink= CreateEmptyTree() ;
T->rlink= CreateEmptyTree() ;
return (T);
}
int main()
{
BTree atree;
atree=CreateEmptyTree() ;
Insert(atree,'a');//atree->info='a';
Insert(atree->llink,'b');//atree->llink->info='b';
Insert(atree->llink->llink,'c');//atree->llink->llink->info='c';
Insert(atree->llink->llink->llink,'d');
Insert(atree->llink->llink->rlink,'e');
Insert(atree->llink->llink->rlink->llink,'f');
BNode x; //寻找一个点的祖先
Parent(atree,atree->llink->llink->rlink->llink, x);
printf("%c ",x->info);
BNode y=x;
while(y!=atree)
{
Parent(atree,y, x);
printf("%c ",x->info);
y=x;
}
printf("\n");
return 0;
}
❷ 利用递归算法找到一张表中父节点和子节点并且进行修改id
您好,你说的情况有两种,第一种,比如id 1,id 2,fid 1,改了id=3,fid=3即可,第二种id=01,id=0101,update set id=replace(id,原id,后来的id) where id like 原id%。
❸ 如何判断根节点,父节点,子节点
根节点的Level属性为0,一级子节点Level属性为1,二级子节点Level属性为2,以此类推;
同级节点可以用索引、名称、文本来区分。
用索引区分根节点时,TreeView.Nodes[0]就是第一个根节点,TreeView.Nodes[1]就是第二个根节点,以此类推;
用索引区分一级子节点时,TreeView.Nodes[0].Nodes[0]为第一个根节点的第一个子节点,TreeView.Nodes[0].Nodes[1]是第一个根节点的第二个子节点,以此类推;
2.如何获取TreeView点击的值加上其父节点直到根节点的值.
用Node.FullPah,可以得到一个字符串,如:根节点/1父节点2/子节点3,你可以对这个字符串替换字符。另外,“/"是自己设定的,通过TreeView的PathSeparator属性设置,你设置为空字符串,得到的FullPath就没有斜杠了。
TreeView tv ;
public X(){
tv = new TreeView();
tv.Click += new EventHandler(tv_Click);
}
void tv_Click(object sender , EventArgs e) {
if(tv.SelectedNode!=null)
//..
}
3.0C#如何用代码向TreeView控件中添加根节点和子级?
1. private void Form1_Load(object sender, EventArgs e)
2. {
3. treeView1.LabelEdit = true;//可编辑状态。
4.
5. ,这个结点是根节点。
6. TreeNode node = new TreeNode();
7. node.Text = "hope";
8. treeView1.Nodes.Add(node);
9. TreeNode node1 = new TreeNode();
10. node1.Text = "hopeone";
11. TreeNode node11 = new TreeNode();
12. node11.Text = "hopeoneone"; 13. TreeNode node2 = new TreeNode();
14. node2.Text = "hopetwo";
15. node1.Nodes.Add(node11);//在node1下面在添加一个结点。
16. node.Nodes.Add(node1);//node下的两个子节点。
17. node.Nodes.Add(node2); 18.
19. TreeNode t = new TreeNode("basil");//作为根节点。
20. treeView1.Nodes.Add(t);
21. TreeNode t1 = new TreeNode("basilone");
22. t.Nodes.Add(t1);
23. TreeNode t2 = new TreeNode("basiltwo");
24. t.Nodes.Add(t2);
25.
26.
27. }
28.3 / 6
29. private void button1_Click(object sender, EventArgs e)
30. {//点击该按钮的时候,会移除选中项
31. treeView1.Nodes.Remove(treeView1.SelectedNode);
32. }
33.
34. private void button2_Click(object sender, EventArgs e)
35. {//点击这个按钮的时候,可以修改选中项
36. treeView1.SelectedNode.BeginEdit();
37. }
❹ 设计一个算法,找出二叉树上任意两个结点的最近共同父结点。求大神帮助
从任意一个节点开始遍历父节点直到根节点并保存到数组中
再从第二个节点开始遍历直到根节点,每遍历一个与上面得到的数组中元素比较
第一个一样的就是最近共同父节点
复杂度o(n)
采纳哦
❺ c++ 二叉树找输入一个任意结点找父亲结点,和输出他的左孩子,右孩子的算法
拿一个struct记录一下左子,右子和某节点的根然后不久找到了吗。。。
class tr
{
public:
int fat,l,r;
tr()
{
fat=l=r=0;
}
};
然后输入二叉树啊,输每个节点时把tr[i].l=左子编号,tr[i].r=右子编号,tr[l].fat=tr[r].fat,也就是他的左子和右子的根是该节点,根节点的父亲是0。
❻ c#中如何根据当前节点找到父节点(不用循环)
xml?
还是页面控件》?
Control.Parent.ID 父控件的id
❼ 求助:如何从一棵二叉树的一系列带有左右子节点索引值的节点中找到这棵二叉树的根
由于树的节点特性,致使整棵树中唯一只有根节点“只有后续 而无前驱”
这样可以事先通过程序列出树的节点集合,在排除“必定不为根”的节点(即一节点为另一节点的左右孩子时,该节点则有前驱,必不为树根),这样将每个节点处理一遍后,树的节点集合中
必定只有一个节点未被排除,即那个没有前驱的节点,这个点就是树根。
❽ 查找双亲结点的算法
查找双亲结点的方法:
node* search(node *par,node *cur)
{
if(cur)
{
search(cur,cur->lchild);
if(cur->data==x)return par;
search(cur,cur->rchild);
}
}
双亲结点就是父节点,一般指的是树状结构,相对于当前的节点而言,它的上层节点就叫做父节点。
❾ 二叉树两个结点的最近相同父节点怎么求,有什么算法
1. 面对这样的场景,选择父亲孩子结构的方式组建二叉树就很容易了。
2. 如果是普通的左右结点结构组建的二叉树,那就遍历吧。
int GetFather(TreeNode *root, TreeNode *a, TreeNode *b)
{
int num = 0;
if (root == NULL)
return 0;
else
{
num = GetFather(TreeNode->left, a, b) + GetFather(TreeNode->right, a, b);
if (num == 2)
{
printf("The father is %d", root->data);
return 0;
}
}
if (root == a || root == b)
return 1 + num;
else
return num;
}
❿ 如何通过子节点得到父节点在爷爷中的索引号
Js方法还是后台方法:
后台方法:
for(int i=0;i<child.ParentNode.ParentNode.ChildNodes.Count;i++)
{
if(child.ParentNode.ParentNode.ChildNodes[i].Name==child.ParentNode.Name)
{
return i;
}
}