五:二叉树输出

1:以括号表示法输出输出:

//输出括号表示 
void DispBTNode( BTNode *p)
{
	if( p!=NULL )
	{
		cout<<p->data;
		if( p->left!=NULL || p->right!=NULL)//至少存在一个儿子时,输出 
		{
			cout<<"(";
			DispBTNode( p->left );
            //当有这句时,若有左儿子没有有儿子,不会输出',';若将这句注释掉,有左儿子没有有儿时,会输出','
			//if( p->right!=NULL ) 
			cout<<",";
			DispBTNode( p->right );
			cout<<")";
		}	
	}
}


在C++中,我们可以创建一个二叉树结构,并实现所需的功能。首先,我们定义一个二叉树节点: ```cpp struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; ``` 然后我们可以分别实现以下几个功能: **功能1:建立二叉树** - 定义一个递归函数,输入一个数组或迭代的元素序列构建二叉搜索树。 ```cpp TreeNode* buildTree(vector<int>& nums, int start = 0, int end = -1) { if (end == -1) { end = nums.size() - 1; } if (start > end) return nullptr; int mid = start + (end - start) / 2; TreeNode* root = new TreeNode(nums[mid]); root->left = buildTree(nums, start, mid - 1); root->right = buildTree(nums, mid + 1, end); return root; } ``` **功能2:树状输出** - 使用中序遍历或前序遍历打印二叉树的结构。 ```cpp void printInorder(TreeNode* node) { if (node != nullptr) { printInorder(node->left); cout << node->val << " "; printInorder(node->right); } } // 或者前序遍历 void printPreorder(TreeNode* node) { if (node != nullptr) { cout << node->val << " "; printPreorder(node->left); printPreorder(node->right); } } ``` **功能3:求二叉树的深度** - 可以采用递归或层次遍历来计算最大深度。 ```cpp int maxDepth(TreeNode* root) { if (root == nullptr) return 0; return 1 + max(maxDepth(root->left), maxDepth(root->right)); } ``` **功能4:后序遍历** - 后续遍历也是递归过程,先访问左、右子树,最后访问根节点。 ```cpp void postOrderTraversal(TreeNode* root) { if (root != nullptr) { postOrderTraversal(root->left); postOrderTraversal(root->right); cout << root->val << " "; } } ``` 你可以将这些函数组合在一起,编写一个主函数来测试上述功能: ```cpp int main() { // 示例 vector<int> nums = {1, 2, 3, 4, 5, 6, 7}; TreeNode* root = buildTree(nums); // 打印结果 cout << "Inorder traversal: "; printInorder(root); cout << "\nMax depth: " << maxDepth(root) << endl; cout << "Postorder traversal: "; postOrderTraversal(root); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值