二叉樹輸出根結點到每個葉結點的路徑
阿新 • • 發佈:2018-12-15
#include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #define MaxSize 100 #define ArrayLen(array) sizeof(array)/sizeof(array[0]) /* * Created by HarvestWu on 2018/10/16. */ using namespace std; //定義二叉樹結構 typedef struct BTNode{ int key; struct BTNode *lchild; struct BTNode *rchild; } BTNode,*BiTree; typedef struct Queue{ struct BTNode *data[MaxSize]; int rear = 1; int front = 1; }; //二叉排序樹關鍵字插入 int BSTInsert(BiTree &bt, int key){ if (bt == NULL){ bt = (BTNode*)malloc(sizeof(BTNode)); bt->lchild = bt->rchild = NULL; bt->key = key; return 1; } else{ if (key == bt->key) return 0; else if (key < bt->key) return BSTInsert(bt->lchild, key); else return BSTInsert(bt->rchild, key); } } //建立二叉排序樹 void CreateBST(BiTree &bt, int key[], int n){ bt = NULL; for (int i = 0; i < n; ++i) BSTInsert(bt, key[i]); } //輸出根結點到每個結點路徑 void RootToLeaf(BiTree bt, Queue q){ if (bt!=NULL){ q.data[q.rear++] = bt; if (bt->lchild == NULL&&bt->rchild == NULL){ while (q.front<q.rear) cout << q.data[q.front++]->key << " "; cout << endl; } RootToLeaf(bt->lchild,q); RootToLeaf(bt->rchild,q); } } //二叉排序樹中序遍歷 void inOrder(BiTree bt){ if (bt != NULL){ inOrder(bt->lchild); cout << bt->key << " "; inOrder(bt->rchild); } } int main(){ BiTree bt; int key[] = { 5, 3, 6, 2, 4, 1 }; int n = ArrayLen(key); CreateBST(bt, key, n); //inOrder(bt); Queue q; RootToLeaf(bt,q); return 0; }