剑指offer 59、60:按之字形顺序打印二叉树 、把二叉树打印成多行

59.题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

        1
    2        3
4      5  6     7
输出1 3 2 4 5 6 7
输入1 -- 2 3左右 ---  7 6 5 4 右左
输出1 -- 3 2 ---  4 5 6 7 栈结构
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int> >data;
        if(pRoot==NULL)
            return data;
        stack<TreeNode*>node[2];
        int first=0,second=1;
        node[first].push(pRoot);
        vector<int> temp_data;
        while(!node[0].empty() || !node[1].empty())
        {
            TreeNode* temp=node[first].top();
            temp_data.push_back(temp->val);
            node[first].pop();
            if(first==0)
            {
                if(temp->left != NULL)
                    node[second].push(temp->left);
                if(temp->right != NULL)
                    node[second].push(temp->right);
            }
            else
            {
                if(temp->right != NULL)
                    node[second].push(temp->right);
                if(temp->left != NULL)
                    node[second].push(temp->left);
            }
            if(node[first].empty())
            {
                first=1-first;
                second=1-second;
                data.push_back(temp_data);
                temp_data.clear();
            }
        }
        return data;
    }

};

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Print(self, pRoot):
        if pRoot==None:
            return []
        data=[]
        node=[pRoot]
        flag=-1
        while len(node):
            temp_data=[]
            length=len(node)
            while length:
                temp_tree=node.pop(0)
                temp_data.append(temp_tree.val)
                if temp_tree.left != None:
                    node.append(temp_tree.left)
                if temp_tree.right != None:
                    node.append(temp_tree.right)
                length-=1
            flag=flag*-1
            data.append(temp_data[::flag])
        return data
        # write code here

60.题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
        vector<vector<int> > Print(TreeNode* pRoot) {
            vector<vector<int> >data;
            if(pRoot==NULL)
                return data;
            queue<TreeNode*>node;
            node.push(pRoot);
            while(!node.empty())
            {
                int len=node.size();
                vector<int>temp_data;
                while (len--)
                {
                    TreeNode* temp=node.front();
                    node.pop();
                    temp_data.push_back(temp->val);
                    if(temp->left)
                        node.push(temp->left);
                    if(temp->right)
                        node.push(temp->right);
                }
                data.push_back(temp_data);
            }
            return data;
        }

};

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Print(self, pRoot):
        if pRoot==None:
            return []
        data=[]
        node=[pRoot]
        while len(node):
            temp_data=[]
            length=len(node)
            while length:
                temp_tree=node.pop(0)
                temp_data.append(temp_tree.val)
                if temp_tree.left != None:
                    node.append(temp_tree.left)
                if temp_tree.right != None:
                    node.append(temp_tree.right)
                length-=1
            data.append(temp_data)
        return data
        # write code here

猜你喜欢

转载自blog.csdn.net/zd_nupt/article/details/81561604