遍历2叉树

        工作一段时间了,有点想跳曹,一部分为了钱,一部分为了更好的发展,在招聘专区投了份微创的简历,本以为是没戏了,一个星期后给我打了个电话,当时还在办公室,只能跑出去了,结果电话里给我出了些题目,全是关于树的.答对了写,有些也答不上了.
        记的有题是说不用递归遍历2叉树.今天有空就写写.
        先贴原码.
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  TREE
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            TreeControl treecontrol 
= new TreeControl();
            TreeNode mytree 
=treecontrol.CreateTree();
            printTree(mytree);
            Console.WriteLine(
"haha");
            whileprinttree(mytree);
            Console.WriteLine(
"heihei");
         
        }



        
/**//// <summary>
        
/// 递归法
        
/// </summary>
        
/// <param name="mytree"></param>

        public static void printTree(TreeNode mytree)
        
{
            
if (mytree != null)
            
{
                Console.WriteLine(mytree.NodeValue);
                printTree(mytree.RightChild);
                printTree(mytree.LeftChild);
            }

        }


        
/**//// <summary>
        
/// 非递归法
        
/// </summary>
        
/// <param name="mytree"></param>

        public static void whileprinttree(TreeNode mytree)
        
{
            Stack
<TreeNode> mystack = new Stack<TreeNode>();
            mystack.Push(mytree);
            
while (mystack.Count != 0)
            

                TreeNode node 
= mystack.Pop();
                Console.WriteLine(node.NodeValue.ToString());
                
if (node.RightChild != null)
                
{
                    mystack.Push(node.RightChild);
                }

                
if (node.LeftChild != null)
                
{
                    mystack.Push(node.LeftChild);
                }

            }

        }

        
    }


    
}



   递归的方法就不用多说了,说下不用递归的方法.
先构造一棵树,然后创建一个堆栈.
如图1

然后访问跟节点1,放入堆栈,接着while判断堆栈是否为空,在把节点1出堆栈
出堆栈后访问两个孩子节点,并把孩子节点入栈.

接着就是把孩子节点出堆栈,在访问孩子节点2,然后把2的孩子节点入堆栈

以下步骤就不说了 给图就明白了.

最后堆栈为空退出循环.整个树就访问完了.


请大家指正.
posted on 2008-05-17 11:29 清凉tea 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/qingliangtea/archive/2008/05/17/1201296.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值