zoukankan      html  css  js  c++  java
  • 二叉树遍历 递归/非递归 模板(??)

    递归版

    void First_order_traversal(int i) //先序
    {
    	printf("%d
    ", key[i]);
    	First_order_traversal(lc[i]);
    	First_order_traversal(rc[i]);
    }
    void Sequential_traversal(int i) //中序
    {
    	Sequential_traversal(lc[i]);
    	printf("%d
    ", key[i]);
    	Sequential_traversal(rc[i]);
    }
    void Post_order_traversal(int i) //后序
    {
    	Post_order_traversal(lc[i]);
    	Post_order_traversal(rc[i]);
    	printf("%d
    ", key[i]);
    }
    

    非递归版

    int vis[MAXN], lc[MAXN], rc[MAXN], key[MAXN];
    void First_order_traversal(int i)
    {
    	stack<int> st;
    	st.push(i);
    	while(!st.empty())
    	{
    		i = st.top(); st.pop();
    		printf("%d
    ", key[i]);
    		if(rc[i]) st.push(rc[i]);
    		if(lc[i]) st.push(lc[i]);
    	}
    }
    void Sequential_traversal(int i)
    {
    	stack<int> st;
    	st.push(i);
    	while(!st.empty())
    	{
    		if(!(i=st.top())) { st.pop(); continue; }
    		i = st.top(); vis[i]++;
    		if(vis[i] == 1) st.push(lc[i]);
    		else if(vis[i] == 2) printf("%d
    ", key[i]), st.push(rc[i]);
    		else st.pop();
    	}
    }
    void Post_order_traversal(int i)
    {
    	stack<int> st;
    	st.push(i);
    	while(!st.empty())
    	{
    		if(!(i=st.top())) { st.pop(); continue; }
    		vis[i]++;
    		if(vis[i] == 1) st.push(lc[i]);
    		else if(vis[i] == 2) st.push(rc[i]);
    		else printf("%d
    ", key[i]), st.pop();
    	}
    }
    
  • 相关阅读:
    基于SAAJ的客户端
    SOAP消息的结构
    服务端的思考
    最简单的Web Service实现
    PLSQL的注释技巧
    复杂分支图示
    Tomcat常见错误
    maven常见错误
    SpringMvc参数传递中乱码问题
    springmvc常遇到的错误
  • 原文地址:https://www.cnblogs.com/Orz-IE/p/12039498.html
Copyright © 2011-2022 走看看