資料結構學習之二叉樹遞迴和非遞迴遍歷演算法

2022-09-03 17:57:10 字數 2117 閱讀 6025

雖然自己很失敗,但是自己還是做出來,雖然是在趕作業,但是我對自己能認真去寫也感到很開心了,這裡留下個坑點,關於這個後序非遞迴我還不是特別理解。

用非遞迴遍歷演算法遍歷二叉樹

#include #include #include #include #define maxsize 100+7

using namespace std;

typedef char elemtype;

typedef struct node

btnode;

//二叉樹基本操作

void createbtree(btnode *&b, elemtype str); //建立二叉樹

void destroybtree(btnode *&b); //銷毀二叉樹

btnode *findnode(btnode *b, elemtype x); //返回值為x的指標

int bthight(btnode *b); //求高度

btnode *lchildnode(btnode *b); //

btnode *rchildnode(btnode *b); //

void disptree(btnode *b); //輸出二叉樹

//遞迴遍歷操作

void preorder(btnode *);

void inorder(btnode *);

void postorder(btnode *);

// 非遞迴遍歷操作

void preorder1(btnode *p);

void inorder1(btnode *p);

void postorder1(btnode *p);

void levelorder(btnode *);

typedef struct

sqstack;

void createbtree(btnode *&b, char *str)

}j++;

ch=str[j];

}}void disptree(btnode *b)

}}/** error

void bthight(btnode *b,int n)

*/// 做一步就+1 最後就是高度了。

int bthight(btnode *b)

}void destroytree(btnode *b)

else

**/if(b!=null)

}btnode * findnode(btnode *b,elemtype x)

else if(b->data==x) return b;

p=findnode(b->lchild,x);

if(p!=null)

return p;

else return findnode(b->rchild,x);

}void preorder(btnode *p)

}void inorder(btnode *p)

}void postorder(btnode *p)

}void gradorder(btnode *p,char *a,int i)

else

*(a+i)=p->data;

}void preorder1(btnode *b)

}printf("\n");

//銷毀棧

free(&st);

}void inorder1(btnode *b)

if(st.top!=-1)}}

printf("\n");

free(&st);

}// 到時候去理解

資料結構學習之二叉樹

一 為什麼用二叉樹,而不是三個指標域或是根據實際情況指定指標域?比如3,那麼有n個節點就是有3n個指標域,其中邊只有n條,那麼只有n 1個域非空,有2n 1個域為空,浪費空間。而對於2,那麼就只有n 1個域為空。而比如說根據實際來確定指標域,對於實現上是非常困難的。度為2的樹就是二叉樹。斜二叉樹 完...

資料結構之二叉樹的非遞迴排序

方法 1 建立乙個棧 2 把根節點入棧 3 取出棧頂元素,訪問這個節點 4 把當前節點的右子樹入棧,左子樹入棧 非空 5 回到3重複執行。源程式 public static void preorderbyloop treenode root 建立乙個棧 stack stack newstack 把根...

資料結構學習筆記之二叉樹 BST

bst是二叉樹的一種,其中每個結點的左孩子小於該結點的值,右孩子大於於該結點的值,對該樹進行中序遍歷可以得到一組有序序列 二叉搜尋樹 include typedef struct node node typedef struct tree tree void insert tree tree,int...