void InorderTraverse(BTreeNode* bt, VisitFuncPtr action) { if(bt != NULL) { InorderTraverse(bt->left, action); action(bt->data); InorderTraverse(bt->right, action); } }
void InorderTraverse(TreeNode* root, std::vector<int>& result) { if (root == NULL) return; InorderTraverse(root->left, result); result.push_back(root->val); InorderTraverse(root->right, result); }
void PostorderTraverse(BTreeNode* bt, VisitFuncPtr action) { if(bt == NULL) return; InorderTraverse(bt->left, action); InorderTraverse(bt->right, action); action(bt->data); }
void BinarySearchTree<T>::InorderTraverse(BSTNode<T>* pNode) { if(pNode != NULL) { InorderTraverse(pNode->pLeft); cout<<pNode->nData<<" "; InorderTraverse(pNode->pRight); } }
int InorderTraverse(BiTree T) { if(T!=NULL) { InorderTraverse(T->lchild); printf("%d ",T->data); InorderTraverse(T->rchild); } return OK; }
void InorderTraverse(BtNode root) //LDR { if(root == NULL) { return; } InorderTraverse(root->left); printf("%d\n", root->data); InorderTraverse(root->right); return; }
std::vector<int> ConvertTreeNodeToVector(TreeNode* root) { std::vector<int> result; InorderTraverse(root, result); return result; }
int main() { BTreeNode * bt1 = MakeBTreeNode(); BTreeNode * bt2 = MakeBTreeNode(); BTreeNode * bt3 = MakeBTreeNode(); BTreeNode * bt4 = MakeBTreeNode(); BTreeNode * bt5 = MakeBTreeNode(); BTreeNode * bt6 = MakeBTreeNode(); SetData(bt1, 1); SetData(bt2, 2); SetData(bt3, 3); SetData(bt4, 4); SetData(bt5, 5); SetData(bt6, 6); MakeLeftSubTree(bt1, bt2); MakeRightSubTree(bt1, bt3); MakeLeftSubTree(bt2, bt4); MakeRightSubTree(bt2, bt5); MakeRightSubTree(bt3, bt6); PreorderTraverse(bt1, ShowInData); printf("\n"); InorderTraverse(bt1, ShowInData); printf("\n"); PostorderTraverse(bt1, ShowInData); printf("\n"); return 0; }
void BinarySearchTree<T>::Test() { DataIO<T> dataIO; cout<<endl<<TEST_BEGIN_STRING<<endl; cout<<"Let's See The Test of Binary Search Tree"<<endl; T* pData = dataIO.GetDataFromStdIO(1); if(pData != NULL) { unsigned int nDataByte = dataIO.GetDataByte(); //Add data into tree for(unsigned int i=0;i<nDataByte;i++) { cout<<"Insert Data:"<<pData[i]<<endl; Insert(pData[i]); } cout<<"PreorderTraverse the Binary Search Tree"<<endl; PreorderTraverse(); //Traverse the node of the tree cout<<endl<<"InorderTraverse the Binary Search Tree"<<endl; InorderTraverse(); cout<<endl<<"PostorderTraverse the Binary Search Tree"<<endl; PostorderTraverse(); cout<<endl; for(unsigned int i=0;i<nDataByte;i++) { Delete(pData[i]); //Delete data from the tree cout<<"Delete Data:"<<pData[i]<<endl; cout<<"PreorderTraverse the Binary Search Tree"<<endl; PreorderTraverse(); cout<<endl; } cout<<TEST_END_STRING<<endl<<endl; } }
void TEST() { vector<int> v{ 1,2,3,4,5 }; TreeNode* root = CreateTree(v); FirstOrderTraverse(root); cout << endl; cout << "-----------------------" << endl; FirstOrderTraverseIter(root); cout << "-----------------------" << endl; InorderTraverse(root); cout << endl; cout << "-----------------------" << endl; InorderTraverseIter(root); cout << "-----------------------" << endl; PostorderTraverse(root); cout << endl; cout << "-----------------------" << endl; PostorderTraverseIter(root); cout << endl; cout << endl; MakeEmpty(root); printf("Make empty OK!\n"); }
void BSTShowAll(BTreeNode *bst){ InorderTraverse(bst,ShowIntData); }
void main() { BiTree T; //定义一个指向BiTNode结点的指针 int choice; do{ printf("\n"); printf("请选择操作:\n"); printf("1.按照先序的次序生成一颗二叉树\n"); printf("2.递归算法实现二叉树的先序遍历,输出各结点值\n"); printf("3.用非递归算法实现二叉树的遍历,输出各结点值\n"); printf("4.求度分别为0、1、2的结点的数目(递归算法实现)\n"); printf("5.求度分别为0、1、2的结点的数目(非递归算法实现)\n"); printf("6.按层次遍历二叉树\n"); printf("7.求二叉树的高度(深度)\n"); printf("8.判断是否为完全二叉树,输出\"Yes!\"或\"No!\"\n"); printf("9.交换每个结点的左右子树,并用先序遍历的方式输出\n"); printf("10.对交换左右子树后的二叉树作中序遍历\n"); printf("11.保存到文件\n"); printf("12.从文件中读取并输出\n"); printf("13.退出\n"); scanf("%d",&choice); switch(choice){ case 1: CreateBiTree(&T); //创建二叉树 break; case 2: PreOrderTraverse(T); //利用递归算法的先序遍历,输出结点值 break; case 3: PreOrderTraverse2(T);//利用非递归算法的先序遍历,输出结点值 break; case 4: get_node(T); //利用递归算法得到的各个结点的个数 break; case 5: get_node_1(T); //利用非递归算法得到的各个结点的个数 break; case 6: LevelOrder(T); break; case 7: printf("二叉树的高度为%d\n",height(T)); break; case 8: if(judge(T)==0) printf("No!\n"); else printf("Yes!\n"); break; case 9: exchange(T); PreOrderTraverse(T); break; case 10: InorderTraverse(T); break; case 11: copy_TERM("d:\\aaa.dat",T); break; case 12: type("d:\\aaa.dat",T); break; } }while(choice!=13); }
void BinarySearchTree<T>::InorderTraverse() { InorderTraverse(m_pRoot); }