一.二叉树如何表示输入:
二.二叉树完整代码
#include <iostream> #include<cstdio> #include<cstdlib> using namespace std; typedef struct BinaryTreeNode { int data; struct BinaryTreeNode *Left; struct BinaryTreeNode *Right; }Node; //创建二叉树,顺序依次为中间节点->左子树->右子树 Node* createBinaryTree() { Node *p; int ch; cin>>ch; if(ch == 0) //如果到了叶子节点,接下来的左、右子树分别赋值为0 { p = NULL; } else { p = (Node*)malloc(sizeof(Node));//动态分配空间 p->data = ch; p->Left = createBinaryTree(); //递归创建左子树 p->Right = createBinaryTree(); //递归创建右子树 } return p; } //先序遍历 void preOrderTraverse(Node* root) { if( root ) { cout<<root->data<<' '; preOrderTraverse(root->Left); preOrderTraverse(root->Right); } } //中序遍历 void inOrderTraverse(Node* root) { if( root ) { inOrderTraverse(root->Left); cout<<root->data<<' '; inOrderTraverse(root->Right); } } //后序遍历 void lastOrderTraverse(Node* root) { if( root ) { lastOrderTraverse(root->Left); lastOrderTraverse(root->Right); cout<<root->data<<' '; } } //二叉树节点总数目 int Nodenum(Node* root) { if(root == NULL) { return 0; } else { return 1+Nodenum(root->Left)+Nodenum(root->Right); } } //二叉树的深度 int DepthOfTree(Node* root) { if(root) { return DepthOfTree(root->Left)>DepthOfTree(root->Right)?DepthOfTree(root->Left)+1:DepthOfTree(root->Right)+1; } if( root == NULL ) { return 0; } } //二叉树叶子节点数 int Leafnum(Node* root) { if(!root) { return 0; } else if( (root->Left == NULL) && (root->Right == NULL) )//两边都是空,才说明它是叶子节点 { return 1; } else { return (Leafnum(root->Left) + Leafnum(root->Right)) ; } } int main() { Node *root = NULL; root = createBinaryTree(); printf("二叉树建立成功"); cout<<endl; cout<<"二叉树总节点数为:"<<Nodenum(root)<<endl; cout<<"二叉树深度为:"<<DepthOfTree(root)<<endl; cout<<"二叉树叶子节点数为:"<<Leafnum(root)<<endl; cout<<"前序遍历结果:"<<endl; preOrderTraverse(root); cout<<endl; cout<<"中序遍历结果:"<<endl; inOrderTraverse(root); cout<<endl; cout<<"后序遍历结果:"<<endl; lastOrderTraverse(root); cout<<endl; return 0; }
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 typedef struct BinaryTreeNode 5 { 6 int date; 7 struct BinaryTreeNode*Left; 8 struct BinaryTreeNode*Right; 9 }Node; 10 11 Node* createBinaryTree() 12 { 13 Node *p; 14 int val; 15 cin>>val; 16 if(val==0) 17 p=NULL; 18 else 19 { 20 p=(Node*)malloc(sizeof(Node)); 21 p->date=val; 22 p->Left=createBinaryTree(); 23 p->Right=createBinaryTree(); 24 } 25 return p; 26 } 27 28 void preOrderTraverse(Node* root){ 29 if(root!=NULL) 30 { 31 cout<<root->date<<" "; 32 preOrderTraverse(root->Left); 33 preOrderTraverse(root->Right); 34 } 35 } 36 37 void inOrderTraverse(Node* root){ 38 if(root!=NULL) 39 { 40 preOrderTraverse(root->Left); 41 cout<<root->date<<" "; 42 preOrderTraverse(root->Right); 43 } 44 } 45 46 void lastOrderTraverse(Node* root){ 47 if(root!=NULL) 48 { 49 preOrderTraverse(root->Left); 50 preOrderTraverse(root->Right); 51 cout<<root->date<<" "; 52 } 53 } 54 55 int Nodenum(Node* root)//二叉树节点数 56 { 57 if(root==NULL) 58 return 0; 59 else 60 return Nodenum(root->Left)+Nodenum(root->Right)+1; 61 } 62 63 int DepthofTree(Node* root) 64 { 65 if(root) 66 return DepthofTree(root->Left)>DepthofTree(root->Right)?DepthofTree(root->Left)+1:DepthofTree(root->Right)+1; 67 if(root==NULL) 68 return 0; 69 } 70 71 int Leafnum(Node* root) 72 { 73 if(!root) 74 return 0; 75 else if(root->Left==NULL&&root->Right==NULL) 76 return 1; 77 else 78 return Leafnum(root->Left)+Leafnum(root->Right); 79 } 80 81 82 int main(){ 83 Node *root=NULL; 84 root=createBinaryTree(); 85 cout<<endl; 86 cout<<"二叉树总节点数为:"<<Nodenum(root)<<endl; 87 88 cout<<"二叉树深度为:"<<DepthofTree(root)<<endl; 89 90 cout<<"二叉树叶子节点数为:"<<Leafnum(root)<<endl; 91 92 cout<<"前序遍历结果:"<<endl; 93 preOrderTraverse(root); 94 cout<<endl; 95 96 cout<<"中序遍历结果:"<<endl; 97 inOrderTraverse(root); 98 cout<<endl; 99 100 cout<<"后序遍历结果:"<<endl; 101 lastOrderTraverse(root); 102 cout<<endl; 103 104 return 0; 105 }
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef struct TreeNode{ 4 int data; 5 struct TreeNode* left1; 6 struct TreeNode* right1; 7 }Node; 8 9 Node* createTreeNode() 10 { 11 Node* p; 12 int val; 13 cin>>val; 14 if(val==0) 15 p=NULL; 16 else 17 { 18 p=(Node*)malloc(sizeof(Node)); 19 p->data=val; 20 p->left1=createTreeNode(); 21 p->right1=createTreeNode(); 22 } 23 return p; 24 } 25 26 //先序遍历 27 void PreCheck(Node* root) 28 { 29 if(root!=NULL) 30 { 31 cout<<root->data<<" "; 32 PreCheck(root->left1); 33 PreCheck(root->right1); 34 } 35 } 36 37 //中序遍历 38 void InCheck(Node* root) 39 { 40 if(root!=NULL) 41 { 42 PreCheck(root->left1); 43 cout<<root->data<<" "; 44 PreCheck(root->right1); 45 } 46 } 47 48 //后序遍历 49 void LastCheck(Node* root) 50 { 51 if(root!=NULL) 52 { 53 PreCheck(root->left1); 54 PreCheck(root->right1); 55 cout<<root->data<<" "; 56 } 57 } 58 59 //节点总数 60 int TreeNum(Node* root) 61 { 62 if(root==NULL) 63 return 0; 64 else 65 return 1+TreeNum(root->left1)+TreeNum(root->right1); 66 } 67 68 //叶叶子节点总数 69 int LeafNum(Node* root) 70 { 71 if(root==NULL) 72 return 0; 73 else if(root->left1==NULL&&root->right1==NULL) 74 return 1; 75 else 76 return LeafNum(root->left1)+LeafNum(root->right1); 77 } 78 79 //二叉树的深度 80 int DepthTree(Node* root) 81 { 82 if(root==NULL) 83 return 0; 84 else 85 return DepthTree(root->left1)>DepthTree(root->right1)?DepthTree(root->left1)+1:DepthTree(root->right1)+1; 86 } 87 88 int main() 89 { 90 Node* p=NULL; 91 cout<<"创建二叉树"<<endl; 92 p=createTreeNode(); 93 cout<<"二叉树创建成功"<<endl; 94 cout<<endl; 95 cout<<"先序遍历"<<endl; 96 PreCheck(p); 97 cout<<endl; 98 cout<<"中序遍历"<<endl; 99 InCheck(p); 100 cout<<endl; 101 cout<<"后序遍历"<<endl; 102 LastCheck(p); 103 cout<<endl; 104 cout<<TreeNum(p)<<endl; 105 cout<<LeafNum(p)<<endl; 106 cout<<DepthTree(p)<<endl; 107 }