中级农民
- 积分
- 101
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2010-9-3
- 最后登录
- 1970-1-1
|
namespace CopyTreeNode
{
class CopyTreeNode
{
static void Main(string[] args)
{
NeryTreeNode root = new NeryTreeNode(' ');
NeryTreeNode b= new NeryTreeNode('b');
NeryTreeNode c = new NeryTreeNode('c');
NeryTreeNode d = new NeryTreeNode('d');
NeryTreeNode e = new NeryTreeNode('e');
NeryTreeNode f = new NeryTreeNode('f');
NeryTreeNode g = new NeryTreeNode('g');
NeryTreeNode h = new NeryTreeNode('h');
NeryTreeNode i = new NeryTreeNode('i');
NeryTreeNode j = new NeryTreeNode('j');
NeryTreeNode k = new NeryTreeNode('k');
NeryTreeNode l = new NeryTreeNode('l');
root.children[0] = b;
root.children[1] = c;
root.children[2] = d;
root.children[3] = e;
b.children[0] = f;
b.children[1] = g;
b.children[2] = h;
b.children[3] = i;
c.children[1] = g;
c.children[2] = k;
NeryTreeNode copyRoot = new NeryTreeNode(' ');
NeryTreeNode B = new NeryTreeNode('B');
NeryTreeNode C = new NeryTreeNode('C');
NeryTreeNode D = new NeryTreeNode('D');
NeryTreeNode E = new NeryTreeNode('E');
NeryTreeNode F = new NeryTreeNode('F');
NeryTreeNode G = new NeryTreeNode('G');
NeryTreeNode H = new NeryTreeNode('H');
NeryTreeNode I = new NeryTreeNode('I');
NeryTreeNode J = new NeryTreeNode('J');
NeryTreeNode K = new NeryTreeNode('K');
NeryTreeNode L = new NeryTreeNode('L');
copyRoot.children[0] = B;
copyRoot.children[1] = C;
copyRoot.children[2] = D;
copyRoot.children[3] = E;
B.children[0] = F;
B.children[1] = G;
B.children[2] = H;
B.children[3] = I;
C.children[1] = G;
C.children[2] = K;
var result1 = new CopyTreeNode().GetCopy(root, copyRoot, h);
var result2 = new CopyTreeNode().GetCopy(root, copyRoot, d);
var result3 = new CopyTreeNode().GetCopy(root, copyRoot, k);
}
public NeryTreeNode GetCopy(NeryTreeNode root, NeryTreeNode copyRoot, NeryTreeNode from)
{
var result = new List<string>();
GetPath(root, from, new StringBuilder(), result);
if (result.Count == 0)
{
return null;
}
string path = result[0];
NeryTreeNode current = copyRoot;
for (int i = 0; i < path.Length; i++)
{
int number = path[i] - '0';
current = current.children[number];
}
return current;
}
public void GetPath(NeryTreeNode root, NeryTreeNode target, StringBuilder sb, List<string> result)
{
if (root == null)
{
return;
}
if (root == target)
{
result.Add(sb.ToString());
}
var children = root.children;
for (int i = 0; i < children.Length; i++)
{
if (children[i] != null)
{
sb.Append(i);
GetPath(children[i], target, sb, result);
sb.Remove(sb.Length - 1, 1);
}
}
}
}
public class NeryTreeNode
{
public char val;
public NeryTreeNode[] children;
public NeryTreeNode(char v)
{
val = v;
children = new NeryTreeNode[4];
}
}
}
按照楼主的提示写了一下代码 请指正 由于工作原因用的c# 不好意思 |
|