程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 二叉樹操作

二叉樹操作

編輯:C++入門知識

[cpp] 】
#include<stdio.h>  
#include<stdlib.h>  
#include<assert.h>  
 
struct tnode 

    int data; 
    struct tnode *lchild; 
    struct tnode *rchild; 
}tnode; 
typedef struct tnode * TNode; 
//此程序中沒用上  
TNode newNode(int data) 

    TNode node = (TNode)malloc(sizeof(struct tnode)); 
    node->data = data; 
    node->lchild = NULL; 
    node->rchild = NULL; 
    return node; 

 
 
TNode createTree(TNode root) 

    int data = 0; 
    scanf("%d", &data); 
    if(data == -1) return NULL; 
    root = (TNode)malloc(sizeof(struct tnode)); 
    root->data = data; 
    root->lchild = NULL; 
    root->rchild = NULL; 
    root->lchild = createTree(root->lchild);//如果不賦值給root->lchild則左子樹不會被創建,root->lchild依然會是NULL  
    root->rchild = createTree(root->rchild); 
    return root; 

 
void preorderTraverse(TNode root) 

    if(root != NULL) 
    { 
        printf("%d ", root->data); 
        preorderTraverse(root->lchild); 
        preorderTraverse(root->rchild); 
    } 

 
int treeDepth(TNode root) 

    if(root == NULL) 
        return 0; 
    int nleft = treeDepth(root->lchild); 
    int nright = treeDepth(root->rchild); 
    return (nleft > nright) ? (nleft + 1) : (nright + 1); 

 
void treeFree(TNode root) 

    if(root != NULL) 
    { 
        treeFree(root->lchild); 
        treeFree(root->rchild); 
        printf("%d ", root->data); 
        free(root); 
    } 

 
void test() 

    TNode root = NULL; 
    root = createTree(root); 
    preorderTraverse(root); 
    printf("\n"); 
    int depth = treeDepth(root); 
    printf("depth = %d\n", depth); 
    treeFree(root); 

 
int main() 

    test(); 
    return 0; 

/*****************************\
               1
        2              6
    -1      5       4     -1
         -1  -1  -1  -1  
\*****************************/ 

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

struct tnode
{
 int data;
 struct tnode *lchild;
 struct tnode *rchild;
}tnode;
typedef struct tnode * TNode;
//此程序中沒用上
TNode newNode(int data)
{
 TNode node = (TNode)malloc(sizeof(struct tnode));
 node->data = data;
 node->lchild = NULL;
 node->rchild = NULL;
 return node;
}


TNode createTree(TNode root)
{
 int data = 0;
 scanf("%d", &data);
 if(data == -1) return NULL;
 root = (TNode)malloc(sizeof(struct tnode));
 root->data = data;
 root->lchild = NULL;
 root->rchild = NULL;
 root->lchild = createTree(root->lchild);//如果不賦值給root->lchild則左子樹不會被創建,root->lchild依然會是NULL
 root->rchild = createTree(root->rchild);
 return root;
}

void preorderTraverse(TNode root)
{
 if(root != NULL)
 {
  printf("%d ", root->data);
  preorderTraverse(root->lchild);
  preorderTraverse(root->rchild);
 }
}

int treeDepth(TNode root)
{
 if(root == NULL)
  return 0;
 int nleft = treeDepth(root->lchild);
 int nright = treeDepth(root->rchild);
 return (nleft > nright) ? (nleft + 1) : (nright + 1);
}

void treeFree(TNode root)
{
 if(root != NULL)
 {
  treeFree(root->lchild);
  treeFree(root->rchild);
  printf("%d ", root->data);
  free(root);
 }
}

void test()
{
 TNode root = NULL;
 root = createTree(root);
 preorderTraverse(root);
 printf("\n");
 int depth = treeDepth(root);
 printf("depth = %d\n", depth);
 treeFree(root);
}

int main()
{
 test();
 return 0;
}
/*****************************\
               1
  2              6
    -1      5       4     -1
         -1  -1  -1  -1 
\*****************************/

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved