雖然自己很失敗,但是自己還是做出來,雖然是在趕作業,但是我對自己能認真去寫也感到很開心了,這裡留下個坑點,關於這個後序非遞迴我還不是特別理解。
用非遞迴遍歷演算法遍歷二叉樹
#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...