zoukankan      html  css  js  c++  java
  • 剑指offer-面试题32-之字形打印二叉树-二叉树栈

    /*
    题目:
        分行按层自上向下呈之字形打印二叉树。第一行从左到右,第二行从右到左,第三行从左到右...
    */
    /*
    思路:
        使用两个栈stack1和stack2。
    	stack1存储从左向右打印的节点,stack2存储从右向左打印的节点。
    	stack1中pop的节点,按照先插入左节点再插入右节点的顺序到stack2中。
    	stack2与之相反。
    */
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<cmath>
    #include<stdio.h>
    #include<vector>
    #include<stack>
    #include<queue>
    
    using namespace std;
    
    struct TreeNode {
    	int val;
    	struct TreeNode *left;
    	struct TreeNode *right;
    	TreeNode(int x) :
    			val(x), left(NULL), right(NULL) {
    	}
    };
    
    void Print(TreeNode* root){
        if(root == nullptr) return;
    
        stack<TreeNode*> stack1;
        stack<TreeNode*> stack2;
        stack1.push(root);
        while(!stack1.empty() || !stack2.empty()){
            while(!stack1.empty()){
                TreeNode* temp = stack1.top();
                cout<<temp->val<<" ";
                stack1.pop();
                if(temp->left != nullptr){
                    stack2.push(temp->left);
                }
                if(temp->right != nullptr){
                    stack2.push(temp->right);
                }
            }
            cout<<endl;
            while(!stack2.empty()){
                TreeNode* temp = stack2.top();
                cout<<temp->val<<" ";
                stack2.pop();
                if(temp->right!= nullptr){
                    stack1.push(temp->right);
                }
                if(temp->left != nullptr){
                    stack1.push(temp->left);
                }
            }
            cout<<endl;
        }
    
    }
    
    int main(){
        TreeNode* node1 = new TreeNode(1);
        TreeNode* node2 = new TreeNode(2);
        TreeNode* node3 = new TreeNode(3);
        TreeNode* node4 = new TreeNode(4);
        TreeNode* node5 = new TreeNode(5);
        TreeNode* node6 = new TreeNode(6);
        node1->left = node2;
        node1->right = node3;
        node2->left = node4;
        node3->left = node5;
        node3->right = node6;
    
        Print(node1);
    
    }
    

       

  • 相关阅读:
    ip代理投票
    linq小笔记;
    c#类的执行顺序
    IEnumerable、GetEnumerator、IEnumerator的理解
    English随笔1
    AudioServicesPlaySystemSound音频服务—IOS开发
    iOS开发之压缩与解压文件
    xcode添加Cocos2d
    使用CoreTelephony获得SIM卡网络运营商名称
    iOS设备进行定位?
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/11944958.html
Copyright © 2011-2022 走看看