❶ 二叉樹如何用演算法找到某結點的所有祖先
#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;
}
}