赞
踩
-
- #include "binary_tree.h"
-
-
- BiTreeNode* CreatBiTree(char* s, int &i, int len)
- // 利用先序遍历创建二叉树
- // 参数:先序遍历字符串s,字符串初始下标i=0,字符串长度len。
- // 返回:二叉树
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- BiTreeNode* T;
- if(i<=len && s[i]=='#')
- {
- i++;
- T=NULL;
- }
- else
- {
- T=(BiTreeNode*)malloc(sizeof(BiTreeNode));
- T->data=s[i++];
- T->left=CreatBiTree(s,i,len);
- T->right=CreatBiTree(s,i,len);
- }
- return T;
- /********** End **********/
- }
-
- void InOrder(BiTreeNode* root)
- // 二叉树的中序遍历
- // 参数:二叉树根节点root
- // 输出:中间没有空格,末尾不换行。
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- if(root!=NULL)
- {
- InOrder(root->left);
- printf("%c",root->data);
- InOrder(root->right);
- }
-
- /********** End **********/
-
- }

- #include "binary_tree.h"
-
- int GetTreeDepth(BiTreeNode* root)
- // 计算该二叉树的深度
- // 参数:二叉树根节点root
- // 返回:二叉树的深度
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- int m,n;
- if(root==NULL)
- {
- return 0;
- }
- else{
- m=GetTreeDepth(root->right);
- n=GetTreeDepth(root->left);
- if(m>n)
- return m+1;
- else
- return n+1;
- }
-
-
- /********** End **********/
- }
-
- int GetNodeNumber(BiTreeNode* root)
- // 计算该二叉树的总节点个数
- // 参数:二叉树根节点root
- // 返回:二叉树的总节点个数
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- if(root==NULL)
- {
- return 0;
- }
- else
- return GetNodeNumber(root->left)+GetNodeNumber(root->right)+1;
- /********** End **********/
- }
-
- int GetLeafNodeNumber(BiTreeNode* root)
- // 计算该二叉树的叶子节点个数
- // 参数:二叉树根节点root
- // 返回:二叉树的叶子节点个数
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- if(root==NULL)
- return 0;
- else if(root->left==NULL&&root->right==NULL)
- return 1;
- else
- return GetLeafNodeNumber(root->left)+GetLeafNodeNumber(root->right);
-
- /********** End **********/
- }
-

- #include "binary_tree.h"
-
-
- BiTreeNode* BiTreeChange(BiTreeNode* root)
- // 实现二叉树左右子树的交换(递归法)
- // 参数:二叉树根节点root
- // 返回:二叉树
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- int max=1000;
- BiTreeNode* s[max];
- int k=0;
- s[k]=0;
- if(root)
- {
- k++;
- s[k]=root->left;
- root->left=root->right;
- root->right=s[k];
- root->left=BiTreeChange(root->left);
- root->right=BiTreeChange(root->right);
- k++;
- }
- return root;
-
- /********** End **********/
- }
-
-
- void PreOrder(BiTreeNode* root)
- // 二叉树的前序遍历
- // 参数:二叉树根节点root
- // 输出:二叉树的前序遍历,中间没有空格,末尾不换行。
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- if(root)
- {
- printf("%c",root->data);
- PreOrder(root->left);
- PreOrder(root->right);
- }
-
- /********** End **********/
- }
-

-
- #include "binary_tree.h"
-
-
- BiTreeNode* BiTreeChangeStack(BiTreeNode* root)
- // 实现二叉树左右子树的交换(栈实现)
- // 参数:二叉树根节点root
- // 返回:二叉树
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- stack<BiTreeNode*> s;
- BiTreeNode *temp=NULL,*node=root;
- if(root==NULL)
- return NULL;
-
- s.push(root);
- while(!s.empty())
- {
- temp=node->left;
- node->left=node->right;
- node->right=temp;
-
- if(node->right)
- {
- s.push(node->right);
- }
-
- if(node->left)
- {
- node=node->left;
- }else{
- node=s.top();
- s.pop();
- }
- }
- return node;
- /********** End **********/
- }
-
-
- void PostOrder(BiTreeNode* root)
- // 二叉树的后序遍历
- // 参数:二叉树根节点root
- // 输出:二叉树的后序遍历,中间没有空格,末尾不换行。
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- if(root->left)
- {
- PostOrder(root->left);
- }
- if(root->right)
- {
- PostOrder(root->right);
- }
- printf("%c",root->data);
-
-
- /********** End **********/
- }

-
-
- #include "binary_tree.h"
-
- void HierarchyOrder(BiTreeNode* root)
- // 二叉树的层次遍历(队列实现)
- // 参数:二叉树根节点root
- // 输出:二叉树的层次遍历,中间没有空格,末尾不换行。
- {
- // 请在这里补充代码,完成本关任务
- /********** Begin *********/
- queue<BiTreeNode*> q;
- if(root!=NULL)
- {
- q.push(root);
- }
- while(!q.empty())
- {
- printf("%c",q.front()->data);
- if(q.front()->left != NULL)
- {
- q.push(q.front()->left);
- }
- if(q.front()->right != NULL)
- {
- q.push(q.front()->right);
- }
- q.pop();
- }
-
- /********** End **********/
-
- }

赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。