下面是笔试题目: 根据用户的输入的字母, 构建一个满二叉树, 然后打印出它的所有从根到叶子的路径. (假设用户的输入字母的个数恰好满足构建一个满二叉树)
例如: 输入 a b c d e f g后构建成下面的树
a
b c
c d e f 就是这样的一个满二叉树
然后输出 abc,abd,ace,acf
要求: 使用任意一种你熟悉的语言即可。
然后菜鸟我是这样做的
/**
* Created by tangtang on 15/6/15.
*/
public class Tree {
public static void main(String[] args)
{
byte[] byteArray={'D','B','A','C','F','E','G'};
Node root=new Node();
for (byte b: byteArray)
{
root.insert(b);
}
root.traverseBiTree("");
}
static class Node{
private byte value=-1;
private Node leftChild;
private Node rightChild;
public Node getLeftChild()
{
return leftChild;
}
public Node getRightChild()
{
return rightChild;
}
public byte getValue()
{
return value;
}
public void setLeftChild(Node leftChild)
{
this.leftChild=leftChild;
}
public void setRightChild(Node rightChild)
{
this.rightChild=rightChild;
}
public void setValue(byte value)
{
this.value=value;
}
/**
* 遍历加打印 遍历路径
* 思路 让上一层都产生一个string
* @
return */
public void traverseBiTree(String str)
{
str+=(char)value;
if (leftChild==null&&rightChild==null) {
System.out.println(str);
return;
}
if (leftChild!=null)
{
leftChild.traverseBiTree(str);
}
if (rightChild!=null)
{
rightChild.traverseBiTree(str);
}
}
public void insert(byte c)
{
if (value==-1) {
value = c;
return;
}
if (c>value)
{
if (rightChild==null)
rightChild=new Node();
rightChild.insert(c);
}else {
if (leftChild==null)
leftChild=new Node();
leftChild.insert(c);
}
}
}
}
用java写的 有点长 不过去掉set get方法也非常简洁了
在做的过程产生了这样一个问题
如果 试题问的 就是输入a b c d e f g 生成上边的那个满二叉树 要求下一层的孩子都大于上一层的孩子 并且 右孩子都大于左孩子 如何生成该 上面的那个满二叉树? 好好想想 这个问题还是很困难的
要求只能一个一个的插入 不可以先排序再生成二叉树
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/198803
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.