數據結構--二叉樹總結

#include <iostream>
#include <stdlib.h>

using namespace std;
typedef  int TelemType;

typedef struct BinaryTreeNode
{
	TelemType data;
	struct BinaryTreeNode* Left;
	struct BinaryTreeNode* Right;
}Node;

//創建二叉樹
Node* createBinaryTree()
{
	Node* p;
	TelemType data;
	cin >> data;
	if (data == 0)
	{
		p = NULL;
	}
	else
	{
		p = (Node*)malloc(sizeof(Node));
		p->data = data;
		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();
	cout << "二叉樹建立成功" << endl;
	
	cout << "前序遍歷:" << endl;
	preOrderTraverse(root);
	cout << endl;

	cout << "中序遍歷:" << endl;
	inOrderTraverse(root);
	cout << endl;

	cout << "後序遍歷:" << endl;
	lastOrderTraverse(root);
	cout << endl;

	cout << "二叉樹總節點數爲:" << Nodenum(root) << endl;

	cout << "二叉樹深度爲:" << DepthOfTree(root) << endl;

	cout << "二叉樹葉子節點數爲:" << Leafnum(root) << endl;
	system("pause");
	return 0;
}

///////////C++遞歸實現前序遍歷/////////////
//class Solution {
//public:
//	vector<int> preorderTraversal(TreeNode* root) {
//		if (root)
//		{
//			res.push_back(root->val);
//			preorderTraversal(root->left);
//			preorderTraversal(root->right);
//		}
//		return res;
//	}
//private:
//	vector<int> res;
//};
///////////C++遞歸實現後序遍歷/////////////
//class Solution {
//public:
//	vector<int> postorderTraversal(TreeNode* root) {
//		if (root)
//		{
//			postorderTraversal(root->left);
//			postorderTraversal(root->right);
//			res.push_back(root->val);
//		}
//		return res;
//	}
//private:
//	vector<int> res;
//};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章