我想了解一棵n-tree樹的前序遍歷。 我一直在閱讀,我發現的所有例子都使用左子樹和右子樹,但是在n元樹中,左邊是什麼,右邊的子樹是什麼? 有人可以給出一個很好的解釋或僞代碼嗎?遍歷一棵n-tree樹
0
A
回答
2
而是在left
和right
具體思維,如:
def preorder_traversal(tree)
preorder_traversal(tree->left)
preorder_traversal(tree->right)
end
如果相反,你的看法是分支:
def preorder_traversal(tree)
branches = tree->branches // e.g. [left, middle, next-to-right, right]
branches.each do |branch|
preorder_traversal(branch)
end
end
是否幫助你嗎?
+1
是的!那麼,基本上這麼稱呼根權的每個孩子的遍歷函數? – user2775084
+0
@ user2775084:的確如此:) – Davidann
0
這是我的C++實現,用於n維樹的級別遍歷。您可以稍微調整一下預定義遍歷。它假定一個節點最多可以有50個分支,但您始終可以修改該部分。希望這幫助和請讓我知道如果你發現任何錯誤。 謝謝!
#include <iostream>
#include <map>
#include <vector>
using namespace std;
#define MAXSIZE 50
typedef struct node{
int data;
node** bArray;
} Node;
Node* newNode(int data){
Node* newnode = new Node;
newnode->data = data;
newnode->bArray = new Node* [MAXSIZE];
for(int i=0;i<50;i++){
newnode->bArray[i] = NULL;
}
return newnode;
}
void mapFun(Node* root,int level,map<int,vector<int> >&m){
if(root == NULL)return;
m[level].push_back(root->data);
for(int i=0;i<MAXSIZE;i++)
mapFun(root->bArray[i],level+1,m);
return;
}
void print_level(map<int,vector<int> >&m, int level){
cout<<level<<"th level traversal is........";
vector<int> v = m[level];
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
}
void levelOrder(Node* root, map<int,vector<int> >&m){
mapFun(root,1,m);
int mapsize = m.size();
for(int i=1;i<=mapsize;i++){
print_level(m,i);
cout<<endl;
}
}
int main(){
int i;
map<int,vector<int> >mymap;
map<int,vector<int> > :: iterator it;
Node *root = newNode(1);
root->bArray[0] = newNode(2);
root->bArray[1] = newNode(3);
root->bArray[2] = newNode(4);
Node* first = root->bArray[1];
first->bArray[0] = newNode(8);
first->bArray[1] = newNode(9);
first->bArray[2] = newNode(10);
Node *second = first->bArray[1];
second->bArray[0] = newNode(55);
second->bArray[1] = newNode(65);
second->bArray[2] = newNode(75);
cout << "level order traversal is \n";
levelOrder(root,mymap);
return 0;
}
相關問題
- 1. 按名稱遍歷一棵樹C++
- 2. 你如何遍歷一棵樹?
- 3. 通過遍歷一棵樹方案
- 4. 遍歷一棵樹找到一個節點
- 5. 遞歸深入遍歷一棵樹第一個問題
- 6. 遍歷樹遍歷
- 7. 遞歸遍歷C#中的一棵樹從上往下排
- 8. 在C++中遍歷一棵普通的樹
- 9. 添加類遍歷了普通話了一棵樹
- 10. 如何使用發電機來遍歷一棵樹的葉子
- 11. 方案:遞歸寬度第一棵樹遍歷
- 12. 如何在遍歷它時展開一棵樹?
- 13. 證明一棵樹的樹遍歷算法的時間複雜度
- 14. lisp樹遍歷
- 15. GWT樹遍歷
- 16. 遍歷DOM樹
- 17. 遍歷樹枝
- 18. OCaml - 遍歷樹
- 19. 遍歷樹LISP
- 20. 樹的遍歷
- 21. 樹遍歷python
- 22. InOrder樹遍歷
- 23. Xquery遍歷樹
- 24. SQL樹遍歷
- 25. DOM樹遍歷
- 26. avl樹遍歷
- 27. 在ArangoDB中遍歷一棵樹時保持第一個值的出現
- 28. 如果一棵二叉樹是另一棵樹的子樹
- 29. 二叉搜索樹 - 複製一棵樹到另一棵樹
- 30. C++ ntree實體樹實現
先查找寬度先或深度先搜索 – aaronman