二叉树节点的最大距离---ms

来源:互联网 发布:下载社交软件 编辑:程序博客网 时间:2024/06/05 10:57
/************************************************************* * file: max_distance_of_binary_tree.c * brief:求二叉树节点的最大距离的递归和非递归算法 * yejing@2015.2.9    1.0      creat *************************************************************/  #include <stdi.h> #include <stdlib.h> #include <string.h> #include <assert.h>  typedef struct _tree_node_t{struct _tree_node_t* left;struct _tree_node_t* right;int left_distance;   //左子树的最大距离int right_distance;  //右子树的最大距离char value;          char res[3];         //对齐 }tree_node_t, node_t;  static int current_max_distance = 0;  static void recursive_get_mdistance_bintree(tree_node_t* node){if(!node)return;int tmp;if(node->left){tmp = 0;if(node->left->left_distance > node->left->right_distance)tmp = node->left->left_distance;elsetmp = node->left->right_distance;node->left_distance = ++tmp;}else node->left_distance = 0;if(node->right){tmp = 0;if(node->right->left_distance > node->right->right_distance)tmp = node->right->left_distance;elsetmp = node->right->right_distance;node->right_distance = ++tmp;}else node->right_distance = 0;if(current_max_distance < node->right_distance + node->left_distance)current_max_distance = node->right_distance + node->left_distance;return; } //暂时没有找到好办法 static void loop_get_mdistance_bintree(tree_node_t* node){ }   static node_t* create_binary_search_tree_node(int value){node_t* root = (node_t*)malloc(sizeof(node_t));if(!root)assert(0);root->value = value;root->left  = NULL;root->right = NULL;return root;}static search_appriproate_position(node_t* root, int value){if(!root)assert(0);node_t* tmp = root;do{if(value < tmp->value){if(tmp->left)tmp = tmp->left;elsereturn tmp;}else{if(tmp->right)tmp = tmp-right;elsereturn tmp;}}while(1);return NULL;}static node_t* add_node_to_tree(node_t* root, int value){node_t* tmp = create_binary_search_tree_node(value);if(!tmp)return root;node_t* pos = search_appriproate_position(root, value);if(pos){if(value < pos->value)pos->left = tmp;elsepos->right = tmp;}return root;}  int main(int argc, char* argv[]){node_t* root = create_binary_search_tree_node(8);if(!root)assert(0);add_node_to_tree(root, 6);add_node_to_tree(root, 10);add_node_to_tree(root, 5);add_node_to_tree(root, 7);add_node_to_tree(root, 9);add_node_to_tree(root, 11);recursive_get_mdistance_bintree();printf("current_max_distance:%d after recursive_get_mdistance_bintree\n", current_max_distance);current_max_distance = 0;loop_get_mdistance_bintree();printf("current_max_distance:%d after loop_get_mdistance_bintree\n", current_max_distance);return 1; }

0 0
原创粉丝点击