根到节点的路径
某个节点到根的路径
判断条件为 页节点左右孩子都是空
拷贝每个节点
function createNode(data) {
return {
data: data||null,
child:[]
}
}
var toString=Object.prototype.toString;
function extend( src) {
var dest;
if ( toString.call(src) == "[object Array]") {
dest = [];
for (var i = 0; i < src.length; i++) {
dest[i] = extend(src[i])
}
}else if(toString.call(src) == "[object Object]"){
dest={};
for(var key in src){
dest[key]=extend( src[key] );
}
}else{
dest=src;
}
return dest;
}
var tree = {
data: 1,
child:[
{
data:2,
child:[
{
data:3,
child:[
{
data:8,
child:[]
}
]
},
{
data:4,
child:[
{
data:6,
child:[]
}
]
}]
}
]
};
var stack=[];
var path=[];
findPath(tree)
function findPath(data) {
stack.push( createNode(data.data) );
if ( !data.child.length ) {
var c = extend(stack);
path.push(c);
stack.pop();
}
if (data.child.length) {
for (var i = 0; i < data.child.length; i++) {
findPath(data.child[i])
}
stack.pop();
}
}
console.log( path );
指定节点的路径
function createNode(data) {
return {
data: data||null,
child:[]
}
}
var toString=Object.prototype.toString;
function extend( src) {
var dest;
if ( toString.call(src) == "[object Array]") {
dest = [];
for (var i = 0; i < src.length; i++) {
dest[i] = extend(src[i])
}
}else if(toString.call(src) == "[object Object]"){
dest={};
for(var key in src){
dest[key]=extend( src[key] );
}
}else{
dest=src;
}
return dest;
}
var tree = {
data: 1,
child:[
{
data:2,
child:[
{
data:3,
child:[
{
data:8,
child:[]
}
]
},
{
data:4,
child:[
{
data:6,
child:[]
}
]
}]
}
]
};
var stack=[];
var path=[];
ar stop=0;
findParentPath(tree,4);
function findParentPath( data,findData){
if(stop) return;
stack.push( createNode(data.data) );
if(data.data==findData) {
stop=1;
return;
}
if ( !data.child.length ) {
// var c = extend(stack);
// path.push(c);
stack.pop();
}
if (data.child.length) {
for (var i = 0; i < data.child.length; i++) {
findParentPath(data.child[i],findData);
}
if(stop) return;
stack.pop();
}
}