您的位置:首页 > 职场人生

剑指Offer面试题:21.从上到下打印二叉树

2015-09-03 10:23 627 查看

一、题目:从上到下打印二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入下图中的二叉树,则依次打印出8、6、10、5、7、9、11。

static void TestPortal(string testName, BinaryTreeNode root)
{
if (!string.IsNullOrEmpty(testName))
{
Console.WriteLine("{0} begins:", testName);
}

Console.WriteLine("The nodes from top to bottom, from left to right are:");
PrintFromTopToBottom(root);
Console.WriteLine("\n");
}

static void SetSubTreeNode(BinaryTreeNode root, BinaryTreeNode lChild, BinaryTreeNode rChild)
{
if (root == null)
{
return;
}

root.leftChild = lChild;
root.rightChild = rChild;
}

static void ClearUpTreeNode(BinaryTreeNode root)
{
if(root != null)
{
BinaryTreeNode left = root.leftChild;
BinaryTreeNode right = root.rightChild;

root = null;

ClearUpTreeNode(left);
ClearUpTreeNode(right);
}
}


View Code

3.1 功能测试

//            10
//         /      \
//        6        14
//       /\        /\
//      4  8     12  16
static void Test1()
{
BinaryTreeNode node10 = new BinaryTreeNode(10);
BinaryTreeNode node6 = new BinaryTreeNode(6);
BinaryTreeNode node14 = new BinaryTreeNode(14);
BinaryTreeNode node4 = new BinaryTreeNode(4);
BinaryTreeNode node8 = new BinaryTreeNode(8);
BinaryTreeNode node12 = new BinaryTreeNode(12);
BinaryTreeNode node16 = new BinaryTreeNode(16);

SetSubTreeNode(node10, node6, node14);
SetSubTreeNode(node6, node4, node8);
SetSubTreeNode(node14, node12, node16);

TestPortal("Test1", node10);

ClearUpTreeNode(node10);
}

//               5
//              /
//             4
//            /
//           3
//          /
//         2
//        /
//       1
static void Test2()
{
BinaryTreeNode node5 = new BinaryTreeNode(5);
BinaryTreeNode node4 = new BinaryTreeNode(4);
BinaryTreeNode node3 = new BinaryTreeNode(3);
BinaryTreeNode node2 = new BinaryTreeNode(2);
BinaryTreeNode node1 = new BinaryTreeNode(1);

node5.leftChild = node4;
node4.leftChild = node3;
node3.leftChild = node2;
node2.leftChild = node1;

TestPortal("Test2", node5);

ClearUpTreeNode(node5);
}

// 1
//  \
//   2
//    \
//     3
//      \
//       4
//        \
//         5
static void Test3()
{
BinaryTreeNode node5 = new BinaryTreeNode(5);
BinaryTreeNode node4 = new BinaryTreeNode(4);
BinaryTreeNode node3 = new BinaryTreeNode(3);
BinaryTreeNode node2 = new BinaryTreeNode(2);
BinaryTreeNode node1 = new BinaryTreeNode(1);

node1.rightChild = node2;
node2.rightChild = node3;
node3.rightChild = node4;
node4.rightChild = node5;

TestPortal("Test3", node1);

ClearUpTreeNode(node5);
}

// 树中只有1个结点
static void Test4()
{
BinaryTreeNode node1 = new BinaryTreeNode(1);

TestPortal("Test4", node1);

ClearUpTreeNode(node1);
}

// 树中木有结点
static void Test5()
{
TestPortal("Test5", null);
}


3.2 测试结果



作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: