IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [二叉树]前序遍历、中序遍历、后续遍历、层次遍历

    izzxaz发表于 2016-07-09 07:15:51
    love 0

    0eb30f2442a7d9334adfb451af4bd11373f00198[1]

    前序遍历(ABDECF):

    typedef struct TreeNode {
        int data;
        struct TreeNode *left;
        struct TreeNode *right;
        struct TreeNode *parent;
    } TreeNode;
     
    void pre_order(TreeNode *Node) {
        if(Node != NULL) {
            printf("%d ", Node->data);
            pre_order(Node->left);
            pre_order(Node->right);
        }
    }
    

    中序遍历(DBEAFC):

    typedef struct TreeNode {
        int data;
        struct TreeNode *left;
        struct TreeNode *right;
        struct TreeNode *parent;
    } TreeNode;
     
    void middle_order(TreeNode *Node) {
        if(Node != NULL) {
            middle_order(Node->left);
            printf("%d ", Node->data);
            middle_order(Node->right);
        }
    }
    

    后续遍历(DEBFCA):

    typedef struct TreeNode {
        int data;
        struct TreeNode *left;
        struct TreeNode *right;
        struct TreeNode *parent;
    } TreeNode;
     
    void last_order(TreeNode *Node) {
        if(Node != NULL) {
            last_order(Node->left);
            last_order(Node->right);
            printf("%d ", Node->data);
        }
    }
    

    层次遍历(ABCDEF):

    int level_order(TreeNode * Tree){
    	queue<TreeNode *> q;
    	q.push(Tree);
    	while(!q.empty()){
    		cout<<q.front()->data<<" ";
    		TreeNode *tmp = new TreeNode;
    		tmp->data=q.front()->data;
    		tmp->left=q.front()->left;
    		tmp->right=q.front()->right;
    		q.pop();
    		if(tmp->left!=NULL) q.push(tmp->left);
    		if(tmp->right!=NULL) q.push(tmp->right);
    		
    	}
    	cout<<endl;
    }
    

    606 total views, no views today



沪ICP备19023445号-2号
友情链接