二叉树
作者:互联网
#include <iostream> using namespace std; struct BinaryTree { string data; BinaryTree *Lchild; BinaryTree *Rchild; }; void creat(BinaryTree *&T, string k) //先序遍历顺序建立二叉链表 { string ch; cin >> ch; if (ch == k) T = NULL; else { T = new BinaryTree; T->data = ch; creat(T->Lchild, k); creat(T->Rchild, k); } } int m1 = 0,m2=0,m3=0; void PerOrder(BinaryTree *T) //先序遍历(递归) { if (T) { if (m1 == 1) cout << ','; cout << T->data; m1 = 1; PerOrder(T->Lchild); PerOrder(T->Rchild); } else return; } void InOrder(BinaryTree *T) //中序遍历(递归) { if (T) { InOrder(T->Lchild); if (m2 == 1) cout << ','; cout << T->data; m2 = 1; InOrder(T->Rchild); } else return; } void PostOrder(BinaryTree *T) //后序遍历(递归) { if (T) { PostOrder(T->Lchild); PostOrder(T->Rchild); if (m3 == 1) cout << ','; cout << T->data; m3 = 1; } } int Depth(BinaryTree *T)//求二叉树深度 { int m,n; if(T) { m=Depth(T->Lchild); //递归计算左子树深度为m n=Depth(T->Rchild); //递归计算右子树深度为n return m>n? m+1 : n+1; } else return 0; } int Depthx(BinaryTree *T,string x)//求二叉树中以值为x的结点为根的子树深度 { int m,n; if(T) { if(T->data==x) return Depth(T); else { m=Depthx(T->Lchild,x); n=Depthx(T->Rchild,x); return m>n ? m:n; } } else return 0; } int CountLeaf(BinaryTree *T, int &count) //二叉树叶子结点个数 { if (T != NULL && T->Lchild == NULL && T->Rchild == NULL) { count++; } if (T != NULL) { CountLeaf(T->Lchild, count); CountLeaf(T->Rchild, count); } return count; } void change(BinaryTree *T)//交换左右子树(所有) { if(T==NULL) return ; else { BinaryTree *p=T->Lchild; T->Lchild=T->Rchild; T->Rchild=p; change(T->Lchild); change(T->Rchild); } } void DestroyTree(BinaryTree *T) { if(T==NULL) return; DestroyTree(T->Lchild); DestroyTree(T->Rchild); free(T); } int main() { BinaryTree *Tree; string k; cin >> k; creat(Tree, k);//创建 //需要什么加什么 return 0; }
标签:Lchild,return,int,BinaryTree,二叉树,Rchild,NULL 来源: https://www.cnblogs.com/asterism070/p/16407320.html