线索二叉树又可以成为穿线二叉树,创建其目的在于能使遍历更加方便
#include <stdio.h> #include<stdlib.h> #define MAXSIZE 10 typedef struct node{ int data; int ltag; int rtag; struct node *left; struct node *right; }Node; typedef struct { Node *root; }Tree; void insert(Tree *tree,int value) { Node *node=(Node *)malloc(sizeof(Node)); node->data=value; node->left=NULL; node->ltag=0; node->right=NULL; node->rtag=0; if(tree->root==NULL) { tree->root=node; } else { Node *temp=tree->root; while(temp!=NULL) { if(value<temp->data) { if(temp->left==NULL) { temp->left=node; break; } else temp=temp->left; } if(value>temp->data) { if(temp->right==NULL) { temp->right=node; break; } else temp=temp->right; } } } } int depth(Node *node) { if(node==NULL) return 0; else { int ld=depth(node->left); int rd=depth(node->right); return (ld>rd?ld:rd)+1; } } void inthread(Node *p,Node *pre) { if(p!=NULL) { inthread(p->left,pre); if(p->left==NULL) { p->ltag=1; p->left=pre; } if(pre!=NULL&&pre->right==NULL) { pre->rtag=1; pre->right=p; } pre=p; inthread(p->right, pre); } } int main() { Tree tree; tree.root=NULL; int arr[7]={4,3,5,6,1,2,7}; int n=7; for(int i=0;i<n;i++) insert(&tree,arr[i]); int len=depth(tree.root); printf("length=%d\t",len); printf("\n"); Node *pre=NULL; inthread(tree.root, pre); }
原文:https://www.cnblogs.com/oldfish123/p/12988749.html